如何在cocos2d中从Sprite中检索动作

时间:2012-04-20 04:40:39

标签: cocos2d-iphone

我有一个CCSprite,我正在一个场景中使用,并创建了多个CCAnimation动作,使用单个CCSpriteFrameCache sharedSpriteFrameCache应用于它。虽然一切正常,我可以在动画之间切换,但我觉得我做得很差,并希望通过检索CCSprite上的运行操作来简化我的代码,以便在运行下一个操作之前单独停止它们它

为了帮助创建一些上下文,我们假设以下情况:

  • 我们有一个名为mySprite的CCSprite

  • 我们定义了3个单独的CCAnimation动作,分别用于向右走,向左走,坐着向前看,分别叫做:actionAnimWalkRight,actionAnimWalkLeft和actionAnimSitForward。

  • 当有人触摸mySprite右侧的屏幕时,我们希望精灵向右走,当有人触摸mySprite左侧的屏幕时向左走,当有人触摸mySprite时坐下。

我用来实现此目的的方法如下:

  1. 将CCSprite作为子项放置在场景中。
  2. 告诉精灵使用以下命令运行动作:[self runAction:actionWalkRight];
  3. 当我想在某人触摸后更改动作时,我有一个名为stopAllAnimationActions的方法,我在应用新动作之前调用该方法,无论正在运行什么动作,都会停止任何动画操作。基本上列出了我已经定义的所有CCAnimation / CCActions,并且因为我不想使用stopAllActions而单独停止每个CCAnimation / CCActions。如下:[self stopAction:actionWalkRight]; [self stopAction:actionWalkLeft]; [self stopAction:actionSitForward];
  4. 然后在上述方法触发后使用以下方法应用新动画:[self runAction:actionWalkLeft];
  5. 虽然这样可行,但似乎是一种糟糕的设计,因为我不知道究竟是什么在运行,所以我知道这些物品不会运行。因此,只需寻找建议和最佳推荐做法,在非常复杂的情况下做这样的事情,因此很难跟踪每一种可能的情况。任何反馈都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我建议您简化流程并利用原生Cocos功能,包括stopAllActions。不要重复使用操作,总是从头开始创建它们,因为Cocos开发人员已经很好地讨论了重用动作可能有问题。

Cocos经过了很好的优化,像stopAllActions这样的功能并不是性能损失。实际上它可能比你的方法更快。

答案 1 :(得分:1)

创建操作时,使用常量设置该操作的标记:

actionWalkRight.tag= kCurrentAction;
[self runAction:actionWalkRight];

然后,通过该标记检索正在运行的操作并将其停止。

[self stopActionByTag:kCurrentAction];