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()可以在 sprite 1 完成时调用它来获取 sprite 2,您可以使用调用get()并开始下一个 sprite 移动的回调来实现这一点。为此,您需要创建一个回调方法。假设您在场景中执行此操作,以下代码应该执行此操作

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 并让第一个精灵开始移动,然后第二个精灵开始移动,依此类推。要使其停止,您必须在moveNext().

于 2013-05-31T12:03:26.950 回答