如何使动画2在Cocos2D Objective-C中执行之前等待动画1完成
在我的程序中,当您轻触iOS Sim卡的屏幕时,将使用CCMoveTo发放卡。动画需要0.4秒才能完成。再次点击屏幕,下一组牌即发牌。第二个动画也需要0.4秒。我想做的就是在第一个动画完成之前禁止我的程序处理第二组卡片。尝试了sleep(),但显然无法达到预期效果。还尝试了Cocos2D的CCDelayTime几种不同的方法,但未能产生预期的结果。最简单和/或最节省内存的方法是什么 编辑:@crackity_jones-这是我的HelloWorldLayer文件和我为CCSprite创建的允许移动的类别: HelloWorldLayer.h如何使动画2在Cocos2D Objective-C中执行之前等待动画1完成,objective-c,animation,cocos2d-iphone,Objective C,Animation,Cocos2d Iphone,在我的程序中,当您轻触iOS Sim卡的屏幕时,将使用CCMoveTo发放卡。动画需要0.4秒才能完成。再次点击屏幕,下一组牌即发牌。第二个动画也需要0.4秒。我想做的就是在第一个动画完成之前禁止我的程序处理第二组卡片。尝试了sleep(),但显然无法达到预期效果。还尝试了Cocos2D的CCDelayTime几种不同的方法,但未能产生预期的结果。最简单和/或最节省内存的方法是什么 编辑:@crackity_jones-这是我的HelloWorldLayer文件和我为CCSprite创建的允许移
#import <GameKit/GameKit.h>
#import "CCSprite+MoveActions.h"
#import "cocos2d.h"
// globals
CCSprite *card1;
...
CCSprite *card9;
@interface HelloWorldLayer : CCLayer {
NSMutableArray *deck;
...
int touchCount;
}
...
@end
CCSprite(移动动作)
按如下方式执行
CCSequence
:
[<<CCNode>> runAction:[[CCSequence actions:[deal hand],[CCDelayTime actionWithDuration:.4],[deal 2nd hand].. ,nil]];
[runAction:[[CCSequence actions:[deal hand],[CCDelayTime Action With Duration:.4],[deal Second hand]…,nil]];
这将执行第一个操作,延迟.4秒,执行第二个操作..依此类推..您可以添加所需的操作数您可以尝试此操作!如果需要,可以在CCSequence操作中插入一些CCDelaytime操作
-(void)dealFirstRound {
id card1Move = [CCCallBlock actionWithBlock:^{
[firstCard moveToPosition1];
}];
id card2Move = [CCCallBlock actionWithBlock:^{
[secondCard moveToPosition2];
}];
id card3Move = [CCCallBlock actionWithBlock:^{
[thirdCard moveToPosition3];
}];
id card4Move = [CCCallBlock actionWithBlock:^{
[fourthCard moveToPosition4];
}];
[self runAction:[CCSequence actions:
card1Move,
card2Move,
card3Move,
card4Move,
nil];
}
我理解你的例子,skytz,但唯一的一点是当用户触摸屏幕时,两个动画都会出现。触摸1触发动画1,触摸2触发动画2。这一部分,我得到了。我唯一有困难的部分是让动画2等待动画1完成。就像这样:触摸屏幕一次,卡片动画就会出现。当卡片动画发生时,点击屏幕什么也不发生。在卡片动画1完成后,点击屏幕,然后出现动画2。我希望我能很好地表达这一点。在这种情况下,你可以在.4 s内停用所有触摸(除非你同时需要触摸某处)基本上,我希望我的ccTouchesEnded方法在第一个动画完成之前拒绝用户输入的任何屏幕触摸。现在的方式——这不是我想要的——用户可以快速点击屏幕两次,两个动画将同时发生。添加一个名为isDealing的标志,当收到触摸时,如果该标志为真,则会进行检查n不要启动新政操作,如果不是,则启动一个。使用[CCCallFunc actionWithTarget:selector]在动画代码末尾将其设置为false尝试您所说的,Crackity(上图),但我想我可能错过了它的CCCallFunc部分。我来试一试。显示更多您正在使用的代码将更容易提供解决方案。如果我理解正确,您希望实现什么,请查看我在这个问题中的答案
[<<CCNode>> runAction:[[CCSequence actions:[deal hand],[CCDelayTime actionWithDuration:.4],[deal 2nd hand].. ,nil]];
-(void)dealFirstRound {
id card1Move = [CCCallBlock actionWithBlock:^{
[firstCard moveToPosition1];
}];
id card2Move = [CCCallBlock actionWithBlock:^{
[secondCard moveToPosition2];
}];
id card3Move = [CCCallBlock actionWithBlock:^{
[thirdCard moveToPosition3];
}];
id card4Move = [CCCallBlock actionWithBlock:^{
[fourthCard moveToPosition4];
}];
[self runAction:[CCSequence actions:
card1Move,
card2Move,
card3Move,
card4Move,
nil];
}