Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使动画2在Cocos2D Objective-C中执行之前等待动画1完成_Objective C_Animation_Cocos2d Iphone - Fatal编程技术网

如何使动画2在Cocos2D Objective-C中执行之前等待动画1完成

如何使动画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创建的允许移

在我的程序中,当您轻触iOS Sim卡的屏幕时,将使用CCMoveTo发放卡。动画需要0.4秒才能完成。再次点击屏幕,下一组牌即发牌。第二个动画也需要0.4秒。我想做的就是在第一个动画完成之前禁止我的程序处理第二组卡片。尝试了sleep(),但显然无法达到预期效果。还尝试了Cocos2D的CCDelayTime几种不同的方法,但未能产生预期的结果。最简单和/或最节省内存的方法是什么

编辑:@crackity_jones-这是我的HelloWorldLayer文件和我为CCSprite创建的允许移动的类别:

HelloWorldLayer.h

#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];
}