Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 当通过重载paintcomponent()使用二维图形时,低端机器的性能非常差_Java_Multithreading_Performance_Graphics_Paintcomponent - Fatal编程技术网

Java 当通过重载paintcomponent()使用二维图形时,低端机器的性能非常差

Java 当通过重载paintcomponent()使用二维图形时,低端机器的性能非常差,java,multithreading,performance,graphics,paintcomponent,Java,Multithreading,Performance,Graphics,Paintcomponent,我正在制作一个相对简单的2D空间游戏,使用重新绘制,然后重载paintComponentGraphics g。在我的游戏中,有许多不同的图像相互叠加,比如黑色背景、多个空间站图像、玩家图像、推进器效果、HUD、小地图/雷达、图标、灰尘效果等等。这些都是BuffereImage,并使用g.drawImage绘制到场景中。然而,现在我已经绘制了大约15幅不同的图像,在笔记本电脑/低功耗计算机上的性能相当差。我估计大约每秒10-15帧 我有几个不同的线程:一个线程进行重新绘制,一个线程负责碰撞/物理/

我正在制作一个相对简单的2D空间游戏,使用重新绘制,然后重载paintComponentGraphics g。在我的游戏中,有许多不同的图像相互叠加,比如黑色背景、多个空间站图像、玩家图像、推进器效果、HUD、小地图/雷达、图标、灰尘效果等等。这些都是BuffereImage,并使用g.drawImage绘制到场景中。然而,现在我已经绘制了大约15幅不同的图像,在笔记本电脑/低功耗计算机上的性能相当差。我估计大约每秒10-15帧

我有几个不同的线程:一个线程进行重新绘制,一个线程负责碰撞/物理/控制,其他线程协调效果,就像一个很酷的星尘效果

我不认为如此简单的2D图形会让机器落后那么多。例如,我在一台装有2.5 GHz英特尔i5的笔记本电脑上输入这段视频,游戏的帧速率约为20帧

我在堆栈溢出区搜索答案,但什么也找不到

另外,有趣的是,当游戏转换到不同的场景时,由于一个布尔变量,所有线程都应该结束,而循环退出,并且不再调用绘制所有图像的方法。但是,当下一个场景运行并且只有大约3个不同的drawImage调用时,性能仍然很差

我会编写代码,但我到目前为止所做的编程非常分散,没有多大意义。使用paintComponent时是否存在导致性能非常差的常见错误

谢谢

编辑:这是我的渲染线程:

Thread renderer = new Thread() {
        public void run() {
            while (true) {
                mainScreen.repaint();

            }
        }
};

renderer.start();

您应该使用一个线程来更新游戏状态,并将Swing告知渲染器,等待所需的时间以保持帧速率。考虑到这是可能的,我怀疑你应该有很多问题…没有一个示例代码,真的不可能知道出了什么问题,但听起来你是在滥发EDTI用来做这件事,但它限制了物理、效果和动画的速度到帧速率。一个线程重新绘制,其他线程处理动画/物理/控制,帧速率无关紧要。你滥发EDT是什么意思?你没有给事件调度线程喘息的时间,以便它能够实际处理需要更新的内容。多线程的问题是如何同步所有内容?所有的东西都需要准备好才能绘制,这是系统中的瓶颈,所以在下一个周期中所有需要绘制的东西都准备好之前,屏幕应该无法更新……所以如果我将物理/控制/动画/任何东西与重绘调用放在同一个线程中,它应该修复所有东西?嗯……我不知道如何解决所有问题,但它会导致更少的问题。您还需要在更新之间设置某种延迟,以强制帧速率,以及