我怎样才能在java中拆分paint swing方法?

时间:2009-05-23 12:54:46

标签: java swing paint repaint

我正在用java开发一个大小合适的医院模拟游戏。 现在,我的痛苦方法开始看起来有点大,我需要一种方法将它分成不同的部分...... 我有个主意,但我不确定这是不是最好的方法。 它首先绘制草,然后是医院建筑,然后是任何建筑物,然后是人,然后是建筑物时的任何建筑物预览。草和医院建筑不会改变,所以我只需要画一次。建筑物本身不会经常变化,只有在建造新建筑物时才会发生变化。

我在想,使用布尔值来确定哪些部分需要重新绘制? 理想,喜欢能够分开绘画方法,然后在需要时调用每个方法,但我不确定如何将它分开。

我对java很新,并且在旅途中学习。

提前致谢。

相对

3 个答案:

答案 0 :(得分:3)

另一个想法是为必须在屏幕上绘制的所有项目创建超类或接口。让cvall这个类ScreenObject。然后,您可以在ScreenObject类中指定draw(Graphics2d g)方法。接下来,必须绘制的每个对象都实现draw()方法,并且只关注绘制本身。您甚至可以考虑创建一个变量来确定是否应该运行此绘制方法。

在绘制屏幕的主类中,您可以引用ArrayList中的所有ScreenObjects,而paint()方法将简单地遍历每个对象上的调用draw()。

答案 1 :(得分:1)

我假设你的描述中你的场景被分割成了瓷砖。保留一组布尔值是跟踪下次更新时需要重绘哪些区块的好方法。在某些情况下,LinkedList可能会表现得更好一些。 (我正在考虑一个生命游戏模拟,其中有大量的瓷砖要重绘,你需要检查每个邻居,所以你可能不需要走这条路。)

如果没有看到你的代码,我就不能就分割你的绘画方法提出非常具体的建议。我可以告诉你,在精灵动画中,每个精灵对象通常都有自己的绘制方法,它将主要的Graphics对象(或者更可能是缓冲区)作为参数。由于精灵应该知道自己的图像和位置,然后它可以将自己绘制到主图像中。然后,您的绘制方法可以循环遍历需要重绘的精灵列表并调用它们的绘制方法。

您可以查看Killer Game Programming in Java以获取更多详细信息。

答案 2 :(得分:0)

嗯,我不是一个真正的编程专家,但是分开我的绘制方法我总是只是创建了一个新的方法,它接受一个Graphics对象并从paint中调用它,它总是帮助我保持我的代码有条理但我有从来没有像你这样的大项目,所以它可能不适合你的情况。