cocos2d-x:在多个sprite上运行的顺序操作

时间:2013-05-31 07:19:22

标签: c++ action cocos2d-x

我有很多精灵,我想按顺序在屏幕上移动它们。例如,'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());

1 个答案:

答案 0 :(得分:2)

假设在精灵1完成时可以调用get()来获取精灵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并让第一个sprite开始移动,然后第二个sprite移动,依此类推。要使其停止,您必须在moveNext()中添加适当的条件。