为什么游戏在libgdx中运行缓慢?

Vis*_*ngh 3 libgdx

我在Libgdx制作赛车游戏.我的游戏apk大小是9.92 mb,我使用的是四个纹理包装,总大小是9.92 Mb.我的游戏在桌面上运行,但它在Android设备上运行速度非常慢.它背后的原因是什么?

Kum*_*abh 34

在编程时我们忽略了很少的漏洞.桌面处理器功能更强大,因此游戏可以在桌面上顺畅运行,但在移动设备上可能会变慢.

以下是一些您应该遵循的关键优化游戏流程:

  1. 渲染方法中没有I/O操作.
  2. 避免在渲染方法中创建对象.
  3. 必须重复使用对象(例如,如果您的游戏有1000个平台,但在当前屏幕上,您只能显示3个,而不是使1000个对象生成5或6并重复使用它们).您可以使用LibGdx提供的Pool类进行对象池.
  4. 尝试仅加载在当前屏幕上显示所需的资产.

如果调用垃圾收集器,请尝试检查logcat.如果是这样,那么尝试使用对象类的finalize方法来查找哪些类对象被收集为垃圾并尝试改进它.

祝好运.


The*_*ama 18

我有一些提高性能的额外提示:

  1. 尝试在渲染循环中最小化纹理绑定(或者在制作3D游戏时通常绑定).在绑定另一个纹理单元之前,使用纹理图集并尽可能经常在绑定后使用一个纹理.
  2. 不要显示不在视锥/视口中的内容.首先计算是否有活动相机甚至可以看到绘制的对象.如果没有看到,请不要在渲染时将其加载到GPU上!
  3. 不要在渲染循环中经常使用spritebatch.begin()或spritebatch.end(),因为每次开始/结束时,它都会被刷新并加载到GPU上以呈现其内容.
  4. 在渲染时不要加载资源,除非你在另一个线程中执行过一次.
  5. 最新版本的libgdx还提供了一个GLProfiler,您可以在其中测量每帧的绘图调用,纹理绑定,顶点等数量.我强烈推荐这个,因为总会有一些情况你不会期望内存/计算使用的开销.
    1. 使用libgdx Poolable(接口)对象和Pool来池化对象并最小化对象创建的时间,因为对象的创建可能会在游戏渲染循环中引起微小但明显的断断续续

顺便说一句,没有任何额外的信息,没有人会给你一个好的或精确的答案.如果您认为为您的问题撰写足够的文本或信息是不值得的,为什么值得回答呢?