Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中拆分paint swing方法?_Java_Swing_Paint_Repaint - Fatal编程技术网

如何在java中拆分paint swing方法?

如何在java中拆分paint swing方法?,java,swing,paint,repaint,Java,Swing,Paint,Repaint,我正在用java开发一个相当大的医院模拟游戏。 现在,我的止痛方法看起来有点大了,我需要一种方法把它分成不同的部分。。。 我有个主意,但我不确定这是不是最好的办法。 它首先画草地,然后是医院大楼,然后是任何建筑物,然后是人,然后是任何建筑物在建筑时预览。草和医院大楼不会改变,所以我只需要画一次。建筑本身不会经常改变,只有在新建筑建成后才会改变 我在想,使用布尔值来确定哪些部分需要重新绘制? 理想的情况下,我希望能够拆分绘制方法,然后在需要时调用每个方法,但我不确定如何实际拆分它 我对java还是

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

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

我对java还是一个新手,正在不断学习

提前谢谢


Rel

根据您的描述,我假设您的场景被分割为平铺。保持布尔数组是跟踪下一次更新时需要重新绘制哪些图块的好方法。在某些情况下,LinkedList的性能可能会稍好一些。(我正在考虑一个模拟生活的游戏,其中有大量的瓷砖需要重新绘制,您需要检查每个邻居,因此您可能不需要走这条路线。)

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


您可以查看以获得更详细的信息。

根据您的描述,我假设您的场景已拆分为平铺。保持布尔数组是跟踪下一次更新时需要重新绘制哪些图块的好方法。在某些情况下,LinkedList的性能可能会稍好一些。(我正在考虑一个模拟生活的游戏,其中有大量的瓷砖需要重新绘制,您需要检查每个邻居,因此您可能不需要走这条路线。)

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


你可能会寻找更详细的信息。

我不是一个真正的编程专家,但要分解我的绘画方法,我总是会创建一个新方法,它从绘画中获取图形对象并调用它,它一直帮助我保持代码的条理性,但我从未有过一个听起来像你在做的那样大的项目,因此它可能不适合你的情况。

我不是真正的编程专家,但要分解我的绘画方法,我总是制作一个新方法,它采用一个图形对象,并从绘画中调用它,它一直帮助我保持代码的条理性,但我从未有过一个听起来像您正在处理的大型项目,因此它可能不适合您的情况。

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


在绘制屏幕的主类中,您可以引用ArrayList中的所有ScreenObject,并且您的paint()方法只需在每个对象上迭代调用draw()。

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


在绘制屏幕的主类中,您可以引用ArrayList中的所有ScreenObject,您的paint()方法只需在每个对象上迭代调用draw()。我本来打算这么做的,但我忘了!你的假设是正确的。每个精灵对象都应该有自己的绘制方法。我还不确定如何使用精灵和动画,我只是在努力获得游戏的基本知识,简单的摆动图形和简单的运动动画。这本书看起来棒极了,谢谢!:)就这样。我本来打算这么做的,但我忘了!你的假设是正确的。每个精灵对象都应该有自己的绘制方法。我还不确定如何使用精灵和动画,我只是在努力获得游戏的基本知识,简单的摆动图形和简单的运动动画。这本书看起来棒极了,谢谢!:)啊,讽刺的是,在医院应用止痛法。(对不起,我无法抗拒!)啊,在医院应用止痛法的讽刺。(对不起,无法抗拒!)