JavaFX-游戏循环画布高CPU使用率

问题描述 投票:2回答:1

我正在开发一个简单的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更新画布会大大增加我的...

java performance canvas javafx-8 game-loop
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.