如何分解java中的paint swing方法?

问题描述:

我正在用java开发一个公平大小的医院模拟游戏。 现在,我的疼痛方法开始看起来有点大,我需要一种方法将其分成不同的部分... 我有一个想法,但我不知道这是否是最好的方法。 它首先绘制草地,然后医院大楼,然后任何建筑物,然后人,然后任何建筑物预建时。草地和医院大楼不会改变,所以我只需要画一次。建筑本身不会经常变化,只有在建造新建筑时才会如此。如何分解java中的paint swing方法?

我在想,用布尔值来确定哪些部分需要重绘? 理想情况下,编号喜欢能够分解绘画方法,然后在需要时调用每一个,但我不确定如何物理分割它。

我对java还是比较陌生的,并且在旅途中学习。

在此先感谢。

Rel

+0

啊在医院应用程序中使用_pain_方法的讽刺。 (对不起,无法抗拒!) – nokul 2011-05-11 12:04:14

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

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

我从你的描述中假设你的场景被分割成瓦片。保持一系列布尔值是跟踪下一次更新需要重绘的瓦片的好方法。在某些情况下,LinkedList可能会表现得更好一些。 (我正在考虑一个生命游戏模拟,其中有大量瓷砖重新绘制,并且您需要检查每个邻居,因此您可能不需要走这条路。)

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

如需更多详细信息,您可以查看Killer Game Programming in Java

+0

这就是它。我打算做的很多,但遗忘了! 你假设正确。每个精灵对象都应该有自己的绘图方法。我不确定如何使用精灵和动画,我只是在获取游戏基础atm,简单的摆动图形和简单的动画动画。书看起来真棒谢谢! :) – Relequestual 2009-05-23 20:12:17

嗯,我不是一个真正的编程专家,但分裂我的绘画方法我总是只是一个新的方法,需要一个图形对象,并从绘画调用,它一直帮助我保持我的代码组织,但我从来没有像你正在研究的大项目,所以它可能无法适合你的情况。