2014-02-19 230 views
4

如何檢查SKAction是否已完成其動畫?檢查SKAction是否正在運行

我需要檢查我的操作是否已完成或仍在執行其操作。之後,我想創建一個布爾值來避免主要操作中的多個操作。

SKAction *lionJumpActionComplete = [lionNode actionForKey:@"lionIsJumping"]; 
    lionJumpActionComplete = [SKAction sequence: @[lionJumpActionUp, lionJumpActionFly, lionJumpActionDown, lionJumpActionPause]]; 

    if (lionJumpActionComplete) { 
     return; 
    } 

    [lionNode runAction:lionJumpActionComplete withKey:@"lionIsJumping"]; 

回答

9

如果這是您的節點上運行的唯一動作,你可以檢查此使用:

if (!lionNode.hasActions) { // check if no actions are running on this node 
    // action code here 
} 

或者,你可以設置你的布爾在完成塊獲取操作運行和之後調用完成:

[lionNode runAction:[SKAction sequence: @[lionJumpActionUp, lionJumpActionFly, lionJumpActionDown, lionJumpActionPause]] completion:^{ 
    BOOL isActionCompleted = YES; 
}]; 
0

以下是我在節點上創建步行動畫的示例。在我再次創建它之前,我通過查找它的關鍵字來確保前一個已完成。

SKAction *animAction = [self actionForKey:@"WalkingZombie"]; 

    if (animAction) { 
     return; // we already have a running animation 
    } 

    [self runAction: 
     [SKAction animateWithTextures:[self walkAnimationFrames] 
         timePerFrame:1.0f/15.0f 
           resize:YES 
           restore:NO] 
      withKey:@"WalkingZombie"]; 
} 
+0

對不起,但這不起作用 –

+0

我們可以得到更多的背景知道什麼不起作用嗎?你有沒有用鑰匙註冊你的動作? – jervine10

+0

此動作現在只觸發一次,而不是每次觸摸屏幕時(動作正在運行時除外) –

0

你需要檢查,看看是否節點運行的操作

所以在日區分

if (![self hasActions]) { 
    [self runAction:[self actionForKey:@"ZombieAction"]]; 
} 

可能會更好,可能是

[self runAction:[SKAction repeatForever:[self actionForKey:@"zombieAction"]]]; 

這將永遠保持這樣的動作。