0

私は 2 つCCSpriteの を同時にアニメーション化する単純な cocos2d ゲームを開発しています。この目的のためにCCAction、次のようにそれぞれの CCSprite に s を設定するだけです。

[first runAction:[CCMoveTo actionWithDuration:1 position:secondPosition]];
[second runAction:[CCMoveTo actionWithDuration:1 position:firstPosition]];

次のステップを実行できるように、アニメーションが完了するまで待ちたいと思います。これらのアニメーションが終了するまでどのように待つ必要がありますか?

実際には 2 つのメソッド呼び出しがあります。最初の呼び出しは上記のコードを介してオブジェクトをアニメーション化し、2 番目の呼び出しは他のアニメーションを行います。

最初のアニメーションが完了するまで、2 番目のメソッド呼び出しを遅らせる必要があります。(CCCallBlock最初のメソッドと同じ呼び出し元から 2 番目のメソッドを呼び出したいので、ブロックを使用したくありません。

編集

私はこれを試しました..

__block BOOL moving = YES;
[second runAction:[CCSequence actions:[CCMoveTo actionWithDuration:1 position:firstPosition], [CCCallBlockN actionWithBlock:^(CCNode *node){
            CCLOG(@"\n\n\n\n\n\n\n\nMovement Finished\n\n\n\n\n\n\n\n");
            moving = NO;
        }],nil]];
while(moving);

しかし、CCCallBlock決して呼び出されないため、永遠にwhileループに陥ります=/

4

2 に答える 2

1

cocosのドキュメントからそれを掘り下げないのであれば、アニメーションのグループが終了したかどうかを観察するために、独自のオブザーバーオブジェクトを実装します。いくつかの簡単な手順が必要になります。

  1. 次のような独自のクラスを作成しますPendingOperationsCounter
  2. のオブジェクトをインスタンス化しますPendingOperationsCounter
  3. この特定の終了アクションを登録しますPendingOperationsCounter
  4. PendingOperationsCounter増加保留中の操作カウンターを登録するときに、すべての開始アニメーションをに登録します
  5. アニメーションが終了すると、操作カウンターが減少します
  6. カウンターが再びゼロになると、登録した独自の終了アクションが実行されます

終わり!

于 2012-10-31T11:24:32.340 に答える
0

最初の単純な CCMoveTo の代わりに、CCSequence を使用して、1) MoveTo と 2) CallBlock を使用して 2 番目に開始します。2 番目に開始する呼び出しブロックで、1) moveTo に再び CCSequence を使用し、2) やりたいことを実行するためにセレクターを呼び出します。このユースケースで機能します。より一般的なアプローチについては、ガイドラインとして上記の回答に従ってください。

于 2012-10-31T14:12:28.573 に答える