我有一个类似于无限循环的更新方法,因为它每帧都运行。在这个方法中,我得到一个浮点数,我必须每帧将它转换为一个字符串,以便在屏幕上发布 socore。
我正在使用 << 运算符,它允许我将浮点数复制到字符串流,然后,我使用 str() 函数来获取流的字符串值。
在我声明的头文件scoreString
中,actualScore
和scoreLabel
.
update(dt){
actualScore += combo;
scoreString.str("");
scoreString << actualScore;
scoreLabel->setString(scoreString.str());
scoreString.clear();
}
actualScore
是我要转换为字符串的浮点数。为此,我使用 scoreString 对象,它是一个stringstream
. 为了回收它stringstream
,我使用了str("")
将值设置为空的函数,因此我不必在每次运行循环时都创建对象。
此代码在 cocos2dx 应用程序中使用,并在 IOS 和 android 设备中运行。我只在 android 设备中内存不足。
这是我的 logCat 输出,但我认为它不会显示任何新内容。
01-12 15:35:25.271: D/dalvikvm(13948): GC_FOR_ALLOC freed 297K, 6% free 9580K/10160K, paused 20ms, total 20ms
01-12 15:35:25.321: D/dalvikvm(13948): GC_FOR_ALLOC freed 297K, 6% free 9580K/10160K, paused 20ms, total 20ms
01-12 15:35:25.371: D/dalvikvm(13948): GC_FOR_ALLOC freed 297K, 6% free 9580K/10160K, paused 21ms, total 21ms
01-12 15:35:25.421: D/dalvikvm(13948): GC_FOR_ALLOC freed 297K, 6% free 9580K/10160K, paused 19ms, total 19ms
01-12 15:35:25.472: D/dalvikvm(13948): GC_FOR_ALLOC freed 297K, 6% free 9580K/10160K, paused 18ms, total 18ms
01-12 15:35:25.522: D/dalvikvm(13948): GC_FOR_ALLOC freed 297K, 6% free 9580K/10160K, paused 14ms, total 14ms
01-12 15:35:25.572: D/dalvikvm(13948): GC_FOR_ALLOC freed 298K, 6% free 9581K/10160K, paused 15ms, total 16ms
...
编辑 我将代码更改为评论中的建议,但没有奏效。我还通过 update(dt) 更改了 while(true),这是运行这段代码的真正方法。
编辑 2
这是 sprintf 版本,正如我所说,这也消耗大量内存。我还将actualScore 的类型更改为int。在头文件中,我将 score 声明为char score[16];
update(dt){
actualScore += combo;
sprintf(score, "%d", actualScore);
scoreLabel->setString(score);
}