4

我在 Libgdx 中制作赛车游戏。我的游戏 apk 大小为 9.92 mb,我使用四个纹理打包器,总大小为 9.92 Mb。我的游戏在台式机上运行,​​但在 android 设备上运行速度非常慢。背后的原因是什么?

4

8 回答 8

36

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

以下是您应该遵循的一些关键注意事项,以获得最佳游戏流程:

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

如果调用了垃圾收集器,请尝试检查您的 logcat。如果是这样,请尝试使用对象类的 finalize 方法来查找哪个类对象被作为垃圾收集并尝试对其进行改进。

祝你好运。

于 2013-06-28T08:25:47.263 回答
21

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

  1. 尝试在渲染循环中最小化纹理绑定(或通常在制作 3D 游戏时的绑定)。使用纹理图集并尝试在绑定后尽可能多地使用一个纹理,然后再绑定另一个纹理单元。
  2. 不要显示不在视锥体/视口中的东西。首先计算绘制的对象是否可以被活动相机看到。如果没有看到,请不要在渲染时将其加载到 GPU 上!
  3. 不要在渲染循环中过于频繁地使用 spritebatch.begin() 或 spritebatch.end(),因为每次开始/结束它时,它都会被刷新并加载到 GPU 上以渲染其内容。
  4. 渲染时不要加载资源,除非你在另一个线程中加载一次。
  5. 最新版本的 libgdx 还提供了一个 GLProfiler,您可以在其中测量每帧有多少绘制调用、纹理绑定、顶点等。我强烈建议您这样做,因为在某些情况下您不会期望内存/计算使用的开销。
    1. 使用 libgdx Poolable(接口)对象和 Pool 来池化对象并最大限度地减少对象创建的时间,因为创建对象可能会在游戏渲染循环中导致微小但明显的卡顿

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

于 2014-02-13T16:30:12.363 回答
1

答案可能比“电脑快;手机慢”多一点。相反,重要的是要注意,您的计算机 Java VM 可能是 Oracles 非常优化的 JVM,而您手机的 Java VM 可能是 Dalvik,更不用说它的性能了,它在对象创建和管理方面没有相同的优化。

正如其他人所说,libGDX 正是出于这个原因提供了一个 Pool 类。看看这里:https ://github.com/libgdx/libgdx/wiki/Memory-management

于 2014-07-04T15:25:01.567 回答
1

要真正了解您的游戏运行缓慢的原因,您需要分析您的应用程序。

有可用的免费工具。

在桌面上,您可以使用 VisualVM。在 Android 上,您可以使用 Android Monitor。

通过分析,您会发现哪些方法占用的时间最多。

减速的一个可能原因是纹理绑定。您是否经常在打包纹理的不同页面之间切换?尝试在切换到另一页之前从一页绘制所有内容。

于 2014-02-25T07:07:19.887 回答
0

LibGDX 中一件非常重要的事情是,您应该确保有时从内存中加载资产不能进入 render() 方法。确保您在正确的时间加载资产并且它们没有出现在渲染方法中。

另一个非常重要的事情是尝试计算你的数学并使其独立于渲染,因为你的下一帧不应该等待计算发生......!

这些是我在制作Snake 游戏教程时遇到的主要 2 件事。
谢谢,
阿比吉特。

于 2014-08-11T17:16:02.213 回答
0

思考点(亲身经历)

  1. 不要在渲染方法中继续调用函数,更新诸如时间之类的内容,HUD上的分数(仅在需要时进行这些更新,例如当分数增加时才更新分数等)

  2. 如果特定情况下拨打电话(在特定条件下进行更新,而不是一直),例如。在渲染方法中以 60FPS 调用/更新 - 意味着您每秒更新时间 60 次,而它只需要每秒更新一次)

这些点将极大地影响性能(竖起大拇指)

于 2017-10-22T05:36:57.267 回答
0

我发现的一件事是,绘图是滞后的。这意味着,如果您正在绘制屏幕外的项目,那么它会使用大量无用的资源。如果您只是在绘图前检查它们是否在屏幕上,那么您的性能会大大提高。

于 2016-10-29T22:32:23.237 回答
-3

您需要检查您游戏的图像大小。如果您的图像大小超过使用以下链接“ http://tinypng.org/ ”减小图像的大小。它会帮助你。

于 2013-07-22T07:38:42.867 回答