Количество фракций на узле всегда возвращает 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 (если вы не добавите другое действие).

Другие вопросы по тегам