2013-08-02 12 views
0

我正在编写一个游戏;这样的事情:http://i.stack.imgur.com/HBrEE.png多线程程序中的摆动图形

我有一个名为Canvas的类,它扩展了JLabel并覆盖了paintComponent(),将网格线图像作为背景,然后绘制玩家和障碍物(墙壁)。

通过使用createGraphics(),我得到一个Graphics2D对象。我需要这个来从他们的课上画武器和子弹。 (如你所见,有几种武器在特定的时间间隔内发射子弹。)

为了实现所有这些,使用SwingUtilities.invokeLater()我在Canvas类中绘制了网格线,玩家和墙。我想每个武器和每个子弹创造一个线程;我知道,这是一个矫枉过正的问题,但由于我是多线程新手,我没有其他想法!

另一个问题是Graphics2D对象:我需要在线程之间共享这个对象,所以我想用final关键字;但这是不可能的,因为Graphics2D对象的值将在paintComponent()中确定。

在此先感谢您提供的任何帮助。

回答

3

你不应该使用多线程渲染线程(当然,至少在99%的情况下)。大多数图形程序在一些对象树中保持完整的场景状态,只有一个线程经常呈现(1/60秒)。渲染线程遍历渲染树中的每个对象并调用.paint或其他任何可以获取要绘制的对象的内容。冲洗并重复,你就完成了。

+0

所以我必须在一个线程中完成所有的绘画,并且不再需要传递Graphics2D对象;大!谢谢!但是如果某些对象需要在线程中共享并使它们最终不可能呢? – Aura

+0

你需要什么样的分享?如果你使用真正的面向对象,你很可能需要让你的对象变得更好。 –