cocos2d-android: как отобразить счет - PullRequest
1 голос
/ 08 февраля 2012

Я добавил 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 ]

3 голосов
/ 08 февраля 2012

Я думаю, что вы создаете 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 голос
/ 08 февраля 2012

Если labelFinished не выполнит некоторую очистку, которую мы не видим (вы не показали нам этот код), похоже, вы создаете 5000 ярлыков.

Вы должны хранить один CCLabel в качестве члена классаи используйте setString вместо создания новой метки для каждого приращения оценки.

Еще лучше, вы должны использовать CCLabelAtlas вместо CCLabel для часто меняющихся меток (таких как оценки).

...