cocos2d-android:如何显示分数

时间:2012-02-08 06:09:52

标签: android cocos2d-iphone cocos2d-android

我在更新方法中添加了CCLabel以显示我的游戏分数 它在得分提高到5000之前效果很好。之后logCat显示了信息:

02-08 11:47:37.476: E/dalvikvm-heap(4190): 1048576-byte external allocation too large for this process.
02-08 11:47:37.476: E/dalvikvm(4190): Out of memory: Heap Size=14343KB, Allocated=13585KB, Bitmap Size=2078KB
java.lang.reflect.InvocationTargetException......
caused by java.lang.OutOfMemoryError

我的代码是:

countScore++ ;
Log.e("total Score:", "" + countScore);
    CCLabel labelScore = CCLabel.makeLabel("" + countScore, "DroidSans", 20);

    labelScore.setColor(new ccColor3B(1,1,1));
    labelScore.setPosition(CGPoint.ccp(50, 50));
    addChild(labelScore, 11);
    labelScore.setTag(11);
    _labelScores.add(labelScore);
    CCCallFuncN actionMoveDone1 = CCCallFuncN.action(this, "labelFinished");
    CCSequence action = CCSequence.actions(actionMoveDone1);
    labelScore.runAction(action);

如何解决?

2 个答案:

答案 0 :(得分:3)

我认为您每次需要时都在创建CCLabel。

CCLabel labelScore = CCLabel.makeLabel("" + countScore, "DroidSans", 20);
labelScore.setColor(new ccColor3B(1,1,1));
labelScore.setPosition(CGPoint.ccp(50, 50));
addChild(labelScore, 11);
labelScore.setTag(11);

不要这样做。
将ScoreLable设置为全局变量,并在构造函数中完成初始化,颜色设置和定位。在您的情况下,只使用以下代码。

labelScore.setString("" + countScore);

答案 1 :(得分:1)

除非labelFinished做了一些我们看不到的清理(你没有向我们展示这些代码),看起来你正在创建5000个标签。

您应该将单个CCLabel存储为类成员,并使用setString而不是为每个分数增量创建新标签。

更好的是,您应该使用CCLabelAtlas而不是CCLabel来频繁更改标签(例如分数)。