2011-12-29 93 views
0
-(id) init 
{ 
    // always call "super" init 
    // Apple recommends to re-assign "self" with the "super" return value 
    if((self=[super initWithColor:ccc4(255,255,255,255)])) { 
     [UIApplication sharedApplication].idleTimerDisabled = YES; 
     imageArray = [[NSMutableArray alloc]init]; 
     winSize = [[CCDirector sharedDirector]winSize]; 
     [self addEverything]; 
     [self schedule:@selector(imageBlink) interval:5.0f]; 
    } 
    return self; 
} 

-(void)imageBlink{ 
    int tagNum = (arc4random() %9)+1 ; 

    for (CCSprite *object in imageArray) { 

     if (object.tag == tagNum) { 

      [object runAction: [CCSequence actions:[CCBlink actionWithDuration:2 blinks:1],[CCFadeOut actionWithDuration:2], nil]]; 
      [[SimpleAudioEngine sharedEngine]playEffect:@"slap.mp3"]; 

      NSLog(@"blink"); 
      return; 
     } 
    } 
} 

-(void)addImage{ 
    self.imageTag = 1; 
    for (int i = 0; i <3; i++) { 
     for (int j =0; j<3; j++) { 
      image = [CCSprite spriteWithSpriteFrameName:@"0002.png"]; 

      NSLog(@"%d",imageTag); 
      [image setTag:self.imageTag]; 
      self.imageTag ++ ; 
      image.position = ccp(STAGE_WIDTH/(3)*(j)+35+41, STAGE_HEIGHT/(3)*(i)+115+41); 
      [imageArray addObject:image]; 
      [image setVisible:NO]; 
      [self addChild:image z:2]; 

     } 
    } 
} 

我調度了一個名爲imaged的方法,每隔5秒調用一次blink。該方法將使我的精靈從一個數組閃爍(出現和消失)。但經過幾次調用(大約10次或更多)之後,精靈停止閃爍。但是,通過NSLog「閃爍」的輸出仍以5秒的間隔出現。我在iPhone模擬器和我的iPod上都有這個問題。感謝幫助。Cocos2d CCAction在幾次運行後停止

回答

0

如果一個對象已經運行了閃爍序列,並且運行了另一個對象,這可能會干擾屏幕上發生的事情。我建議在運行新序列之前添加stopAllActions。

我注意到的另一件事是您運行CCFadeOut操作。請記住,在完成此操作後,精靈的不透明度將爲0,並且CCBlink會更改可見屬性,但不會影響不透明度。這意味着您應該確保精靈在啓動序列前處於最大不透明狀態:

[object stopAllActions]; 
object.opacity = 255; 
[object runAction: [CCSequence actions:[CCBlink actionWithDuration:2 blinks:1],[CCFadeOut actionWithDuration:2], nil]];