Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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
JavaAWT适合2d游戏渲染吗?_Java_2d_Awt - Fatal编程技术网

JavaAWT适合2d游戏渲染吗?

JavaAWT适合2d游戏渲染吗?,java,2d,awt,Java,2d,Awt,我目前正在将我的2D游戏引擎移植到Java。我查看了stackoverflow上的一些游戏库。然而,我所看到的那些是非常简单化的,如果它们支持alpha透明的东西,甚至没有声明,所以我决定将我的C++渲染器移植到我已经写出逻辑的.c/p> 此渲染器是纯软件渲染器,它使用平铺来避免不必要的重新渲染。我优化了它的滚动性能,创建了一个比我的输出窗格大一点的“屏幕外缓冲区”,并在每一帧上将这个屏幕外缓冲区显示在我的输出上。这样,我就可以避免仅仅因为我在地图上滚动了一个像素而不必要地重画瓷砖 我使用Jav

我目前正在将我的2D游戏引擎移植到Java。我查看了stackoverflow上的一些游戏库。然而,我所看到的那些是非常简单化的,如果它们支持alpha透明的东西,甚至没有声明,所以我决定将我的C++渲染器移植到我已经写出逻辑的.c/p> 此渲染器是纯软件渲染器,它使用平铺来避免不必要的重新渲染。我优化了它的滚动性能,创建了一个比我的输出窗格大一点的“屏幕外缓冲区”,并在每一帧上将这个屏幕外缓冲区显示在我的输出上。这样,我就可以避免仅仅因为我在地图上滚动了一个像素而不必要地重画瓷砖

我使用Java的AWT来实现它,使用一个大的BuffereImage作为屏幕外的缓冲区。CPU的使用是正常的(大约是我在C++中使用的两倍),但是连续滚动有一个奇怪的问题,大约每秒钟,渲染器就会延迟0.2秒

由于我自己的代码中没有任何东西会在这些时间段内出现,而且如果我不在主视图上绘制屏幕外缓冲区,峰值就会消失,因此我只能得出结论,Java正在自己进行一些内部优化。然而,我不知道它做了什么,也不知道我自己的哪些优化需要删除才能消除尖峰。另外,可能是JavaAWT没有考虑到连续的、高FPS的滚动,这完全不适用于此目的

有什么方法可以让我摆脱这些尖刺吗?

问题更适合于:

这个问题更适合:

听起来可能是垃圾收集器的作用。您是否尝试过使用监视应用程序,并查看收集是否与丢弃的帧同时发生?@Mike Daniels:这是一种可能性。我正在使用jvisualvm进行评测,这就是我得到的:听起来可能只是垃圾收集器的作用。您是否尝试过使用监视应用程序,并查看收集是否与丢弃的帧同时发生?@Mike Daniels:这是一种可能性。我使用jvisualvm进行评测,我得到的结果是:好的,注意到。转载于,关闭这个。好的,注意。转载于,关闭这一个。