2012-04-20 16 views
0

我有我使用场景,并创造了多个CCAnimation行动,以适用于所有使用单个CCSpriteFrameCache sharedSpriteFrameCache一个CCSprite。虽然一切正常,我可以在动画之间切换,但我觉得自己做得不好,希望通过检索CCSprite上的正在运行的动作来简化我的代码,以便在运行下一个动作之前单独停止它们它。如何检索操作从雪碧在cocos2d

,以帮助创造一些背景,让我们假设以下情况:

  • 我们有一个名为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. 然后我应用新的动画使用上述方法闪光后:[自runAction:actionWalkLeft];

虽然这个工作,它似乎是一个糟糕的设计,停止我知道不运行的项目,因为我不知道到底是什么运行。因此,寻找建议和最好的建议做法是在非常复杂的情况下做这样的事情,所以跟踪每一种可能的情况都很困难。对于任何反馈,我们都表示感谢。

回答

1

当创建设定动作的标签以恒定的行动:

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

然后,通过检索该标签的运行动作并停止它。

[self stopActionByTag:kCurrentAction]; 
+0

谢谢Saikat!这很有帮助,因为我没有想过使用通用标签来检索它。这是一个很好的建议。 – XBXSlagHeap 2012-04-20 16:53:58

+0

不客气。乐意效劳。 – Saikat 2012-04-21 01:37:31

1

我建议您简化您的流程并充分利用原生科科斯功能,包括stopAllActions。不要重复使用动作,始终从头开始创建动作,因为Cocos开发人员已经很好地讨论过,重复使用动作可能会出现问题。

科科斯良好优化和类似stopAllActions特征不表现猪。实际上,这可能比你的方法更快。

+0

由于安卓...这也是很好的信息。我没有意识到重新使用操作可能导致错误,因为我对此没有任何问题。不幸的是,我不能使用stopAllActions,因为这也会阻止我的移动动作,而不仅仅是在特定情况下的动画,而是感谢其他指针! – XBXSlagHeap 2012-04-20 16:57:07