2011-11-19 35 views
0

在這個動畫中的位置:在動畫過程中防止Cocos2D觸摸?

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    self.isTouchEnabled = NO; 
    if (scoreLabel.opacity == 225) { 
     NSLog(@"fadeOut"); 
     CCSequence *fadeOut = [CCSequence actions:[CCFadeOut actionWithDuration:0.5], [CCCallFuncN actionWithTarget:self 
     selector:@selector(enableTouches)], nil]; 
     [scoreLabel runAction:fadeOut]; 
     [livesLabel runAction:[[fadeOut copy] autorelease]]; 
    } 
    else { 
     NSLog(@"fadeIn"); 
     CCSequence *fadeIn = [CCSequence actions:[CCFadeIn actionWithDuration:0.5], [CCCallFuncN actionWithTarget:self 
     selector:@selector(enableTouches)], nil]; 
     [scoreLabel runAction:fadeIn]; 
     [livesLabel runAction:[[fadeIn copy] autorelease]]; 
     } 
} 

我想簡單地淡出/在標籤中。但事情是,我想要確保這個方法在標籤動畫時不會被調用。

如果你在代碼看,我試圖通過調用此方法,這樣做:

- (void)enableTouches { 
    NSLog(@"ET"); 
     self.isTouchEnabled = YES; 
} 

但它似乎並沒有工作。如果我在標籤製作動畫時觸摸屏幕,則會在中途動畫化動畫,並且不會執行我想要的操作。

任何想法?

謝謝!

回答

2

我結束了在任何情況下,這樣做也有同樣的問題:

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    self.isTouchEnabled = NO; 

    if(label1.opacity == 0) 
    { 
     CCFadeIn* fadeIn = [CCFadeIn actionWithDuration:0.5]; 
     CCCallBlock* fadeCompleted = [CCCallBlock actionWithBlock:^{ self.isTouchEnabled = YES; }];  

     [label1 runAction:[CCSequence actions:fadeIn, fadeCompleted, nil]]; 
     [label2 runAction:[[fadeIn copy] autorelease]]; 
    } 
    else 
    { 
     CCFadeOut* fadeOut = [CCFadeOut actionWithDuration:0.5]; 
     CCCallBlock* fadeCompleted = [CCCallBlock actionWithBlock:^{ self.isTouchEnabled = YES; }];  

     [label1 runAction:[CCSequence actions:fadeOut, fadeCompleted, nil]]; 
     [label2 runAction:[[fadeOut copy] autorelease]]; 
    } 
} 
+1

另一種方法是使用獨立的BOOL變量來控制在標籤動畫時是否忽略新的觸摸。 – LearnCocos2D

1

如果你不知道,你可以指定標記的行爲,您可以指定標籤節點以同樣的方式。然後,您可以調用getActionByTag:在運行該操作的對象上獲取nil或指向該操作的指針。通過檢查返回值是否爲零或某個動作,您將知道您正在播放的某個動作/動畫是否正在播放。這樣你可以在沒有附加變量的情況下做到這一點。