我正在开发一个简单的JavaFX 2D游戏,并且遇到了[[性能问题。
我正在将我的游戏渲染到画布中,并在每一帧中进行更新。但是以60 FPS更新画布会大大增加我的[CPU使用率],当然也增加了我的GPU使用率。这不是很大的计算,因为我在画布上尝试了非常基本的操作,如下所示,但问题仍然存在。基于我所做的研究,我使用TimeLine
来实现我的游戏循环。这似乎是以我想要的帧速率更新画布的最佳方法:
private void initGameLoop()
{
final Duration oneFrameAmt = Duration.millis(1000/60);
final KeyFrame oneFrame = new KeyFrame(oneFrameAmt, actionEvent ->
{
gameView.getRenderer().render();
});
gameLoop = new Timeline();
gameLoop.setCycleCount(Animation.INDEFINITE);
gameLoop.getKeyFrames().add(oneFrame);
}
在此配置中,我以60 FPS的速度运行游戏循环,并且更改正在FX应用程序线程上运行。
我的渲染功能非常简单:
public void render() { gc.clearRect(0, 0, 50, 50); gc.setFill(Color.BLACK); gc.fillRect(0, 0, 50, 50); }
gc
是我的画布的graphicsContext2D
。
我的画布根据应用程序的窗口大小进行缩放,但是我只是以每帧60帧的速度重新绘制一个50x50的黑色矩形,在默认窗口大小下,但在全屏模式下,我的CPU使用率增加了[[8-10%我的CPU使用率增加了[[25%到30%,这太疯狂了。
[硬件加速正在运行,除了我的CPU使用率外,我的GPU使用率约为30%。游戏中什么也没发生时,我不能停止渲染画布,因为我需要渲染动画。
并且基本上只重画画布的部分区域没有任何变化,因为我的基本测试(如上所示)仅在画布的左上角重绘了一个50x50像素的矩形,并且它仍然使用25%+
CPU的数量。我在网络上发现的所有用JavaFX制作的游戏循环或动画示例都使用相同的技术,但到目前为止,我尝试过的每个示例都具有很高的CPU使用率。我的渲染非常流畅流畅,但是CPU使用率却很高。我似乎无法找到为什么花很少的时间在我的CPU和GPU上花这么多钱的原因,却找不到如何提高游戏性能的解决方案。根据我的研究发现,画布似乎是用JavaFX渲染游戏的最佳方法。
我的问题是:
有什么办法可以使用画布来提高性能?我应该使用具有多个元素的场景图吗?还是有我尚未想到的解决方案?感谢您的帮助!我正在开发一个简单的JavaFX 2D游戏,遇到性能问题。我正在将游戏渲染到画布中,并在每一帧中进行更新。但是以60 FPS更新画布会大大增加我的...