首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX -游戏循环画布高CPU使用率

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

Stack Overflow用户
提问于 2020-02-09 22:30:16
回答 1查看 909关注 0票数 2

我正在做一个简单的JavaFX 2D游戏,我遇到了性能问题

我正在将我的游戏渲染成一个画布,每一帧都会更新。但是,更新60 FPS的画布会极大地增加我的CPU使用率,当然也会增加我的GPU使用量

它不是来自大型计算,因为我在画布中尝试了非常基本的操作,如下所示,问题仍然存在。

根据我所做的研究,我使用一个TimeLine来实现我的游戏循环。这似乎是以我想要的帧速率更新画布的最佳方式:

代码语言:javascript
复制
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应用程序线程上运行。

我的呈现功能非常简单:

代码语言:javascript
复制
public void render()
{
    gc.clearRect(0, 0, 50, 50);
    gc.setFill(Color.BLACK);
    gc.fillRect(0, 0, 50, 50);
}

我的画布的graphicsContext2Dgc

我的画布正在缩放我的应用程序的窗口大小,但我只是重新绘制一个50x50黑色矩形每帧,在60 FPS我的使用量增加8-10%的在默认窗口大小,但在全屏上我的CPU使用增加了25%到30%的,这是疯狂的。

硬件加速正在运行,除了我的CPU使用量,我的GPU使用率约为30%。

当游戏中什么都没有发生时,我不能停止渲染画布,因为我需要渲染我的动画。

基本上,只重画画布的部分区域不会改变任何事情,因为我的基本测试(如上面所示)只在画布左上角重新绘制50x50像素的矩形,而且它仍然使用CPU的25%+

我在网络上发现的用JavaFX制作的游戏循环或动画的所有例子都使用了相同的技术,但到目前为止,我尝试过的每一个例子都有很高的CPU使用率。

我的渲染是非常流畅和流畅的,但CPU的使用是高的方式,它所做的。我似乎找不出为什么做这么少需要我的CPU和GPU那么多,也找不到一个解决方案,如何提高我的游戏性能。从我的研究中发现,画布似乎是在JavaFX中渲染游戏的最佳方式。

我的问题是:使用画布提高性能的有什么方法吗?我应该使用多元素的场景图吗?或者我还没有想到什么解决办法呢?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-02-10 08:31:13

从概念上说,JavaFX呈现总是有一个CPU和一个GPU部分。在CPU部分中,几何被准备呈现,GPU部分最终完成呈现。画布呈现是最慢的选项,因为API强制您在每个帧中都要创建新对象,当您想要更改某些内容时,这意味着您总是会受到呈现的CPU慢部分的影响。另一方面,如果您应用于场景的更改仅是转换转换(可以扩展到旋转并使用适当的呈现提示进行缩放),则场景图形呈现可能会更快,因为然后您只会遭受一次CPU缓慢部分的困扰,而不是在每个帧中。如果你必须不断地改变几何也,那么你失去了与两种方法和唯一的选择是进行三维渲染(这是我所做的)通过一个三角形的网格。令人高兴的是,在JavaFX中,3D渲染可以很容易地与2D渲染结合起来,以获得两个世界的最佳效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60141962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档