Java AWT适合2D游戏渲染吗?

问题描述:

我目前正在将我的2D游戏引擎移植到Java。我查看了一些在这里指向*的游戏库。然而,我所看到的那些过于简单,甚至没有说明它们是否支持像alpha透明这样的东西,所以我决定移植我已经写出逻辑的C++渲染器。Java AWT适合2D游戏渲染吗?

这个渲染器是一个纯粹的软件渲染器,它使用平铺来避免不必要的重新渲染。我通过创建比我的输出窗格略大的“屏幕外缓冲区”来优化其滚动性能,并将此屏幕外缓冲区传输到每个帧的输出上。这样,我可以避免不必要的重绘瓦片,因为我在地图上滚动了一个像素。

我使用Java的AWT来实现它,使用一个大的BufferedImage作为离屏缓冲区。 CPU使用率是可以的(大约是我在C++中的两倍),但是持续滚动存在一个奇怪的问题,即每隔一秒左右,渲染器将滞后大约0.2秒。

由于在我自己的代码中没有任何内容会出现在这些时期,并且由于尖峰消失,如果我没有将我的离屏缓冲区绘制到主视图上,我只能得出结论,Java正在做一些内部优化拥有。但是,我不确定它的功能,也不知道我必须删除哪些优化条件才能消除峰值。另外,可能java AWT并不是以连续的,高FPS滚动的方式制作的,而且这对于这个目的来说是完全无法使用的。

有没有办法让我摆脱这些尖峰?

+1

这听起来像它可能只是垃圾收集器在踢你是否尝试过与监控[JConsole的]您的应用程序(http://download.oracle.com/javase/。 1.5.0/docs/guide/management/jconsole.html#memory)并查看收集是否与丢失的帧同时发生? –

+0

@迈克丹尼尔斯:这是一种可能性。我使用jvisualvm进行分析,这是我得到:http://i.imgur.com/EMxkA.png – cib

问题适合于更好: https://gamedev.stackexchange.com/

+0

好的,注意。转载于http://gamedev.stackexchange.com/questions/16619/is-java-awt-suitable-for-2d-game-rendering,关闭这一个。 – cib