0

想象一下使用 Text() 实体制作的分数计数器。简单的。

在我开始游戏后,调用setText()会导致启动GC_EXPLICIT会减慢游戏速度导致冻结,并且在几次调用后 - 问题消失了。首先,我认为这是 Java 中字符串和连接的问题,所以我使用了 StringBuilder。问题依然存在。如果我更改setText("$" + score + "M")为简单,setText("0")则不会注意到打嗝!

4

2 回答 2

4

问题出在Font. 的创建Texture实际上并没有将字符加载到这个Texture!您需要做的就是在创建Font简单的调用之后:

pFont.prepareLetters("0123456789".toCharArray()); 包含您需要的所有字符。

于 2013-04-03T11:35:37.230 回答
0

由于GC_EXPLICITFont inupdate()明确调用System.gc(). 删除这条线,我们回到了绿线下方的轨道上,是的!60 帧/秒。

然而,AndEngine 的作者可能有这个明确调用的原因。由于阶段很短,我们允许我们的应用gc()在暂停、退出或阶段完成时调用它GameScene,任何没有过多动画的地方。

预先准备字符并不能缓解打嗝,因为文本是动态的,我们无法准备所有可能的字符来保留System.gc()这种方法,但以后会尊重它。

实际上,预先准备信件不会触发GC_EXPLICIT,正如 OP 提供的答案中所描述的那样。

编辑

经过一番研究,导致 < 60fps 的另一件事是SoundPool,我们应该用音量0f,0f和循环播放声音,以防止SoundPool重置为空闲状态并再次重新启动。

于 2015-10-21T09:18:18.370 回答