Количество фракций на узле всегда возвращает 1 в cocos2d 2.1
Приведенный ниже пример кода никогда не выходит из цикла while и выводит на экран количество выполняемых действий как 1 всегда. Чего мне не хватает?
Заранее спасибо Кришна
-(id)init
{
if(self == [super init])
{
CCSPrite *mySprt = [CCSprite spriteWithFile:@"myFile.png"];
mySprt.position = ccp(160,240);
mySprt.tag = 331;
CCFadeTo *fadeSprt = [CCFadeTo actionWithDuration:20.0 opacity:0];
[mySprt runAction:fadeSprt];
[self addChild:mySprt];
[self checkActionCount];
}
return self;
}
-(void)checkActionCount
{
while([self getchildByTag:331].numberofrunningactions > 0)
{
NSLog(@"Number of actions = %d",[self getchildByTag:331].numberofrunningactions);
continue;
}
NSLog(@"Number of actions = %d",[self getchildByTag:331].numberofrunningactions);
}
2 ответа
У вас есть бесконечный цикл:
while([self getchildByTag:331].numberofrunningactions > 0)
{
NSLog(..);
continue;
}
continue
оператор выйдет из текущего блока, чтобы переоценить while
условие, которое верно, которое будет делать continue
и переоценить while
состояние и так на всю вечность.
Вместо этого попробуйте это:
if ([self getchildByTag:331].numberofrunningactions > 0)
{
NSLog(..);
}
и позвонить checkActionCount
метод из запланированного селектора, для установки update:
, чтобы условие оценивалось один раз за каждый кадр.
CCFadeTo *fadeSprt = [CCFadeTo actionWithDuration:20.0 opacity:0];
[mySprt runAction:fadeSprt];
Вы инициализируете CCAction
с продолжительностью 20,0 секунд. Теперь вы запускаете его на mySprt
, это увеличивает количество подсчетов RunAction на 1.
это то, что вы проверяете в цикле while, и он записывает 1. Через 20 секунд после завершения действия. он будет записывать 0 (если вы не добавите другое действие).