【问题标题】:CCActionSequence runs all actions at the same timeCCActionSequence 同时运行所有动作
【发布时间】:2014-06-18 09:07:07
【问题描述】:

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

我创建了一个带有一些文本的标签。我希望它在淡出时向上移动。之后,将其从场景中移除。我创建了 3 个动作:moveBy、Fade 和 Remove。查看网络上的一些教程,我应该能够将这些操作与 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 的宏

【问题讨论】:

  • 在你的代码中找不到任何问题,你能不能把所有的动作按顺序包括[labelDP runAction:[CCActionSequence actions:actionMove, actionFade, actionRemove, nil]];看看效果
  • ALERT_FADE_DURATION 是如何声明的?
  • @InderKumarRathore:尝试了同样的结果

标签: ios objective-c animation cocos2d-iphone


【解决方案1】:

我相信问题是在同一个节点上调用runAction 两次。

编辑:正如在调用 runAction 的 cmets 中提到的 LearnCocos2D 所提到的,只要动作不相互干扰(即在同一节点上并行运行的两个移动动作),那么一次应该可以工作) 所以它要么是版本 3.x 中的行为变化,要么是您的 ALERT_FADE_DURATION 定义太小(如 cmets 中所述)

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

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

[labelDP runAction:sequenceAction];

这应该会给你想要的效果。首先移动和淡化标签,然后才将其从其父节点中移除

【讨论】:

  • 反复调用runAction: 没问题。这是并行而不是按顺序运行动作的常见方式。除非在 v3 中更改了此行为。
  • 是的,这些操作不会相互干扰,但他的代码看起来是合法的,所以它要么是 v3 的更改(我找不到批准它的来源),要么是 ALERT_FADE_DURATION 的问题,因为你已经注意到
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 2014-01-24
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多