CCActionSequence同时运行所有操作

时间:2014-06-18 09:07:07

标签: ios objective-c animation cocos2d-iphone

我在cocos2d v3.0(iPhone,Objective-C)中使用CCActionSequence时遇到问题。

我创建了一个带有一些文字的标签。我希望它在淡出时向上移动。之后,将其从场景中删除。我创建了3个动作:moveBy,Fade和Remove。看一下Web上的一些教程,我应该能够将动作与CCActionSequence链接在一起。但是,当我这样做时,所有三个动作同时运行,基本上在淡入淡出之前移除我的标签并移动动画。

CCLabelTTF *labelDP = [CCLabelTTF labelWithString:@"Double Points!" fontName:@"Helvetica" fontSize:16.0f];
labelDP.positionType = CCPositionTypeNormalized;
labelDP.position = ccp(0.5f,0.5f);
labelDP.color = [CCColor colorWithWhite:1.0f alpha:1.0f];
[self addChild:labelDP];

CCAction *actionMove = [CCActionMoveBy actionWithDuration:ALERT_FADE_DURATION position:ccp(0.0f, 40.0f)];
CCAction *actionFade = [CCActionFadeOut actionWithDuration:ALERT_FADE_DURATION];
CCAction *actionRemove = [CCActionRemove action];

[labelDP runAction:actionFade];
[labelDP runAction:[CCActionSequence actions:actionMove, actionRemove, nil]];

是否有设置使这些动画按顺序而不是同时运行?因为在我看到的所有教程中,他们似乎能够使用与上面类似的代码行来实现它。

任何帮助都将不胜感激。

编辑:ALERT_FADE_DURATION是一个定义为2.0f的宏

2 个答案:

答案 0 :(得分:1)

我认为问题是在同一节点上两次调用runAction

编辑:正如调用runAction的注释中提到的LearnCocos2D,只要操作不相互干扰(即同一节点上的两个移动操作),就应该工作一次并行)因此它可能是版本3.x中的行为更改,也可能是您的ALERT_FADE_DURATION定义太小(如注释中所述)

尝试使用可以在同一节点上并行运行操作的CCActionSpawn操作:

CCAction *spawnAction = [CCActionSpawn actionWithArray:@[actionMove , actionFade]];
CCAction *sequenceAction = [CCActionSequence actionWithArray:@[spawnAction]];

[labelDP runAction:sequenceAction];

这应该会给你带来理想的效果。首先移动并淡化标签,然后将其从父节点中删除

答案 1 :(得分:0)

试试这个:

CCAction *actionMove = [CCActionMoveBy actionWithDuration:ALERT_FADE_DURATION position:ccp(0.0f, 40.0f)];
CCAction *actionFade = [CCActionFadeOut actionWithDuration:ALERT_FADE_DURATION];
CCAction *actionRemove = [CCActionRemove action];

id seq = [CCActionSequence actions:actionMove, actionRemove, nil];

[labelDP runAction:[CCActionSpawn actions:actionFade, seq, nil]];