Исходя из вашего комментария, я думаю, что вы можете найти решение, которое может работать. Вместо звонка ...
CCLabelBMFont *label = [CCLabelBMFont labelWithString:text fntFile:@"Font2.fnt"];
каждый раз в damageText
почему бы просто не иметь переменную-член, которую вы инициируете в конструкторе, а затем задавать текст только в функции damageText
. Таким образом, вы бы в конечном итоге ..
-(void)damageText:(NSString*)text atPosition:(CGPoint)position {
// CCLabelBMFont *label = [CCLabelBMFont labelWithString:text fntFile:@"Font2.fnt"];
label.position = position;
//[self addChild:label z:50];
label.scale = 0.01;
[label runAction:[CCSequence actions:[CCScaleTo actionWithDuration:0.08 scale:1.0],
[CCDelayTime actionWithDuration:0.2],[CCFadeOut actionWithDuration:0.8],
[CCCallFuncN actionWithTarget:self selector:@selector(killLabel:)],nil]];
label.opacity = 0;
[label runAction:[CCFadeIn actionWithDuration:0.04]];
}
Я бы даже не стал беспокоиться об удалении этикетки. Позвольте родителю метки позаботиться об этом (я предполагаю объект CCLayer или CCScene?), Когда он будет освобожден. Если вы хотите удалить метку из вида, просто установите ее видимость в false или ее масштаб в 0.
ОБНОВЛЕНИЕ : также отключил вызов addChild. Вам нужно сделать это только один раз, и, скорее всего, это можно сделать в конструкторе.