我正在编写一个游戏;像这样:http://i.stack.imgur.com/HBrEE.png
我有一个名为Canvas的类,它扩展了JLabel并覆盖了paintComponent()
,将网格线的图像作为背景,然后绘制了玩家和障碍物(墙壁)。
通过使用createGraphics()
,我得到了一个Graphics2D对象。我也需要这个来从他们的班级中绘制武器和子弹。 (如你所见,有几种武器在特定的时间间隔内射击子弹。)
为了实现所有这些,使用SwingUtilities.invokeLater()
我在Canvas类中绘制网格线,播放器和墙。我想到了每个武器和每个子弹创建一个线程;我知道,这是一种矫枉过正,但由于我是多线程的新手,我没有其他想法!
另一个问题是Graphics2D对象:我需要在线程之间共享此对象,所以我想使用final
关键字;但这是不可能的,因为Graphics2D对象的值将在paintComponent()
中确定。
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
您不应该使用多线程渲染线程(至少在99%的情况下)。大多数图形程序在一些对象树中保持完整场景状态,只有一个线程经常渲染(1/60秒)。渲染线程遍历渲染树中的每个对象,并调用.paint或其他任何可以绘制对象的对象。冲洗并重复,你就完成了。