2011-12-29 34 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 blinkという名前のメソッドを5秒ごとに呼び出すようにスケジュールしました。このメソッドは、配列から私のスプライトを点滅させるようにします(現れて消える)。しかし、いくつかの呼び出し(約10以上)後、スプライトは点滅を停止します。しかし、NSLogの "blink"による出力は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]]; 
関連する問題