libGDX奇怪的FPS丢弃和调试

时间:2015-09-12 12:39:44

标签: java android libgdx

我使用libGDX在Android中制作游戏,并使用游戏引擎的这些功能:

  • 声音,音乐
  • TextureAtlas(此obj的总数:2)
  • TileMap
  • 简单的手势检测
  • 使用后处置对象的AssetsManager的良好用法。

我有时会有一些奇怪的FPS掉落。 FPS通常在59左右,然后在第二天它下降到39-42左右,在那一刻游戏"冻结"一点点,所以两帧之间的暂停很大。

我不知道究竟是什么问题以及如何找到问题的根源,因为我不能用我的调试技巧来掩饰它。

  1. 我检查了内存分配,GC acitivity =>没问题,那时候GC没有被激活。
  2. 我已尝试过方法跟踪,但它在跟踪错误方面无用,因为只有跟踪会占用大量资源,启动后FPS大约为10。
  3. 我查看了我的代码并尝试找到问题,但每一帧我都做同样的事情而且没有理由让FPS掉线。
  4. 我不会在帖子上发布一些代码,因为我真的不知道代码的哪一部分会出问题。

    我问你:你对libGDX有什么样的了解吗?你是如何解决这个问题的,你知道我怎么能用调试工具来解决这个问题。

    感谢您的建议。

2 个答案:

答案 0 :(得分:0)

声音和机器人都存在一些小问题,特别是在三星设备上(可能是你的模拟器)。

我怀疑这是导致问题的原因,如果您在播放多个并发声音时检查帧率,它会略微下降,如您所述。

尽可能克服这种情况的方法是尽可能地降低声音/音乐文件的采样率,并将音乐存储为.mp3,声音存储为.wav。

原因是Sound作为wav文件会跳过不必要的解码,当声音在内存中混合时会发生.mp3。

希望这有帮助。

答案 1 :(得分:0)

尝试逐个禁用,直到您看到FPS稳定为止。比如说,逐个评论粒子效果,声音爆炸或任何游戏效果。 看看libGDX Profiling

  • 检查是否进行了太多的绘制调用或纹理切换。

  • 逐个在渲染循环中对每个方法使用性能计数器 并且看看哪个人花的时间比应该的多。