通过重载paintcomponent()来使用2D图形时,低端机器的性能非常糟糕

时间:2014-02-26 04:01:24

标签: java multithreading performance graphics paintcomponent

我正在制作一个相对简单的2D太空游戏,使用repaint()然后重载paintComponent(Graphics g)。对于我的游戏,有许多不同的图像叠加在一起,如黑色背景,多个“空间站”图像,播放器图像,推进器效果,HUD,“迷你地图”/雷达,图标,灰尘效果,等等。这些都是BufferedImages,并使用g.drawImage()绘制到场景中。但是,现在我有大约15个不同的图像,笔记本电脑/低功耗电脑的性能非常糟糕。我估计每秒约10-15帧。

我有几个不同的线程:一个线程执行repaint(),一个线程负责碰撞/物理/控制,其他线程协调效果(如一个很酷的星尘效果)。

我不认为这样简单的2D图形会落后于硬盘机器。例如,我在一台配备2.5 GHz的Intel i5的笔记本电脑上打字,并在游戏中获得大约20 fps。

我在Stack Overflow周围寻找答案,但我找不到任何东西。

另外,有趣的是,当游戏转换到不同的场景时,所有线程都应该结束(while循环因为Boolean变量而退出)并且绘制所有图像的方法是不再叫了。但是,当下一个场景运行且只有大约3个不同的drawImage()个呼叫时,性能仍然不佳。

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

感谢。

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

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

            }
        }
};

renderer.start();

0 个答案:

没有答案