在多线程程序中摆动图形

时间:2013-08-02 15:45:43

标签: java multithreading swing

我正在编写一个游戏;像这样:http://i.stack.imgur.com/HBrEE.png

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

通过使用createGraphics(),我得到了一个Graphics2D对象。我也需要这个来从他们的班级中绘制武器和子弹。 (如你所见,有几种武器在特定的时间间隔内射击子弹。)

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

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

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:3)

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