我有很多精灵,我想按顺序在屏幕上移动它们。例如,'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());
答案 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()
中添加适当的条件。