2013-05-31 27 views
0

我有很多精靈,我想在屏幕上依次移動它們。例如'A'移動到(x1,y1)位置,然後'B'轉到(x2,y2)。我想按順序執行這些操作意味着首先'A'完成它的工作,然後'B'開始。
我有一個函數,當我調用它,返回一個精靈和一個地方,我應該發送精靈到那個地方。在移動功能我有這樣的東西:cocos2d-x:在多個精靈上運行的順序動作

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()); 
+0

這是爲了遍歷所有的精靈,對吧? –

回答

2

假設get()可以被稱爲獲取精靈2權當精靈1點結束,你可以實現這個使用調用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); 
} 

有了這個代碼在場景中,你應該能夠呼叫轉移,並有第一精靈開始後的第二個移動移動等等。要使其停止,您必須在moveNext()中添加適當的條件。