我正在尝试强制执行某个操作,然后才能调用另一个操作。我已经看了很多时间延迟和CCSequencing的不同例子,这是我到目前为止所做的,但它仍然无法正常工作。我需要完整的.5才能在另一个动作(无论是向左,向右还是向下)之前出现。只要你在动作结束前没有按下按钮,一切都会正常工作,那就是前一个动作被缩短的时候。
-(void) moveup{
CCNode *mySprite = [self getChildByTag:kTagSprite];
//moves sprite up 30 pixels in 1/2 second
[mySprite runAction: [CCMoveTo actionWithDuration:.5 position:ccp(mySprite.position.x, mySprite.position.y+30)]];
}
//this is inside CCtouchesbegan. upsprite is a box that gets clicked to move the object up
if(CGRectContainsPoint([upsprite boundingBox], point)){
//should call CCSequence of events, method moveup, and then CCDelayTime, forcing a pause
[self runAction:[CCSequence actions:[CCCallFuncND actionWithTarget:self selector:@selector(moveup) data:nil], [CCDelayTime actionWithDuration:.5], nil]];
}
我尝试暂停使用[[CCDirector sharedDirector] pause]
,但这冻结了一切,包括我正在移动的精灵。 CCDelayTime似乎在我当前的例子中不起作用。
我知道这个问题与其他几个关于ccsequencing的问题有些重复,所以如果它需要被标记为欺骗,那很好,但我真的很喜欢一些帮助,因为它真的阻止了我。
答案 0 :(得分:1)
你可以制作一个BOOL“锁定”变量,只对“mySprite”执行操作:
if(lock) {[mySprite runAction:...];}
在开始时将BOOL锁定设置为NO,每次开始操作时将其设置为“YES”...然后将CCCallFunc添加到CCSequence以将锁定设置为“NO”