0

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

我在想,使用布尔值来确定哪些部分需要重新绘制?理想,我希望能够拆分paint方法,然后在需要时调用每个方法,但我不确定如何在物理上拆分它。

我对Java还是很陌生,并且在旅途中学习。

提前致谢。

相对

4

3 回答 3

3

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

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

于 2009-05-23T14:59:03.713 回答
1

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

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

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

于 2009-05-23T13:28:29.590 回答
0

好吧,我并不是真正的编程专家,但为了拆分我的绘画方法,我总是创建一个新方法,它接受一个 Graphics 对象并从绘画中调用它,它总是帮助我保持我的代码有条理,但我从来没有听起来您正在从事的大型项目,因此它可能不适用于您的情况。

于 2009-05-23T13:35:01.120 回答