2013-09-28 25 views
5

私は、次のコードを持っている:私は前のアクションが完了するまで自分の行動が実際に待ちたいアクションが終了するまでSKActionシーケンスは実際に待機しますか?

-(void)aggravatedSeek:(SKSpriteNode *)target{ 
    _isAggravated = YES; 

    SKAction *action = [SKAction runBlock:^{ 
     double randTime = 0.2; 
     NSLog(@"%f", randTime); 
     [self moveToSpriteNode:target withTimeInterval:randTime]; 
    }]; 

    //SKAction *repeatAction = [SKAction repeatAction:action count:6]; 
    SKAction *rep = [SKAction sequence:@[action, action, action, action, action]]; //Test Sequence 

    [self runAction:rep completion:^{ 
     [self runAction:blackColorAction]; 
     _isAggravated = NO; 

    }]; 
} 

を。つまり、私のアクションは、オブジェクトが終了するまで、アクションが繰り返されないように、repアクションがシーケンスされる必要があります。現在のところ、出力はすぐにすべてのアクションを実行し、必要なようにシーケンスを実行しないようです。私は文書を読んだので、今私がしていることは、彼らが何をすると言われたのかです...

答えて

4

runBlock:アクションは、火災の一種のアクションです。それはブロックを正確に1回実行し、その後アクションは直ちに終了します。

あなたがしたいものは、何かアクションが処理できないものです。それらは1回、または一定期間(継続時間)実行されます。しかし、彼らは何らかの条件が満たされるまで実行されません。すぐに真実かもしれませんし、結局は真実になるかもしれないし、決して真実にならないかもしれません。この種の操作は、アクションが可能なすべての可変タイミング機能を無効にします(つまり、時間のスケーリングを容易にする)。

"moveToSpriteNode"の動作をアクションとして発行し、更新メソッドでスプライトがノードに到着したかどうかを個別にチェックすることができます。そうであれば、次の移動動作を実行します(シーケンスを使用しない)。

さらに簡単に、スプライトがターゲットノードに到着したことを意味する移動アクションに頼ることができます。そうすると、シーケンス内の次の移動アクションがトリガーされます。各ターゲットで完了ブロックを実行する場合は、完了ブロック内から次の移動アクションをスケジュールするだけです。

関連する問題