0

多くのスプライトがあり、それらを画面内で順番に移動したい。たとえば、'A' は (x1,y1) の場所に移動し、'B' は (x2,y2) に移動します。これらのアクションを順番に実行したいのは、最初に「A」がジョブを終了し、次に「B」が開始することを意味します。
私はそれを呼び出すとスプライトと場所を返す関数があり、スプライトをその場所に送信する必要があります。移動機能では、次のようなものがあります:

void move(){
    for(int i=0;i<10;i++){
        pair<CCSprite,CCPoint> x=get();
        CCFinitTimeAction* act=CCMoveTo::actionWithDuration(DIST/SPEED,x.second);
        x.first->runAction(act)
    }
}

モーションが終了するまでどのように遅延させることができますか。runAction の後に次の行を追加しましたが、機能しませんでした:

while(!act->isDone());
4

1 に答える 1

2

get()スプライト 1 が終了したときにスプライト 2 を取得するために呼び出すことができると仮定するとget()、次のスプライトの動きを呼び出して開始するコールバックを使用してこれを実装できます。このためには、コールバック メソッドを作成する必要があります。シーンでこれを行っていると仮定すると、次のコードでそれを行う必要があります

void YourSceneClass::move() {
    moveNext();
}

void YourSceneClass::moveNext() {
    pair<CCSprite,CCPoint> x=get();
    CCFinitTimeAction* move=CCMoveTo::actionWithDuration(DIST/SPEED,x.second);
    CCCallFunc* startNext=CCCallFunc::create( this,
        callfunc_selector(YourSceneClass::moveNext) );
    CCSequence* act=CCSequence::create(move, startNext, NULL);
    x.first->runAction(act);
}

シーンでこのコードを使用すると、move を呼び出すことができ、最初のスプライトが動き始め、2 番目のスプライトがその後移動する、というようになります。停止するには、 に適切な条件を追加する必要がありますmoveNext()

于 2013-05-31T12:03:26.950 に答える