Cocos2d iphone 如何在cocos2d中从Sprite检索操作
我在场景中使用了一个CCSprite,并创建了多个CCAnimation操作,所有这些操作都使用单个CCSpriteFrameCache sharedSpriteFrameCache应用于它。虽然一切正常,而且我能够在动画之间切换,但我感觉自己做得很差,希望通过检索CCSprite上正在运行的操作来简化代码,从而在运行下一个操作之前逐个停止这些操作 为了帮助创建一些上下文,让我们假设以下情况:Cocos2d iphone 如何在cocos2d中从Sprite检索操作,cocos2d-iphone,Cocos2d Iphone,我在场景中使用了一个CCSprite,并创建了多个CCAnimation操作,所有这些操作都使用单个CCSpriteFrameCache sharedSpriteFrameCache应用于它。虽然一切正常,而且我能够在动画之间切换,但我感觉自己做得很差,希望通过检索CCSprite上正在运行的操作来简化代码,从而在运行下一个操作之前逐个停止这些操作 为了帮助创建一些上下文,让我们假设以下情况: 我们有一个叫mySprite的精灵 我们分别为向右行走、向左行走和向前坐姿定义了3种不同的动画动作:
- 我们有一个叫mySprite的精灵
- 我们分别为向右行走、向左行走和向前坐姿定义了3种不同的动画动作:actionAnimWalkRight、actionAnimWalkLeft和actionAnimSitForward
- 我们想让精灵在有人触摸mySprite右侧屏幕时向右行走,在有人触摸mySprite左侧屏幕时向左行走,在有人触摸mySprite时坐下
虽然这是可行的,但它似乎是一个糟糕的设计,因为我不知道到底是什么在运行,就停止了我知道没有运行的项目。因此,在非常复杂的情况下,只需寻求建议和最佳推荐做法就可以做到这一点,因此很难跟踪每一种可能的情况。如有任何反馈,我们将不胜感激。我建议您简化流程,并充分利用本机Cocos功能,包括
stopAllActions
。不要重复使用动作,总是从头开始创建它们,因为Cocos开发人员已经很好地讨论过重复使用动作可能有问题
Cocos经过了很好的优化,像
stopAllActions
这样的功能并不是性能的强项。实际上,它可能比您的方法快。创建操作时,请使用常量设置该操作的标记:
actionWalkRight.tag= kCurrentAction;
[self runAction:actionWalkRight];
然后,通过该标记检索正在运行的操作并停止它
[self stopActionByTag:kCurrentAction];
谢谢Saikat!这是很有帮助的,因为我没有想过使用通用标记来检索它。这是一个很好的建议。谢谢andrews…这也是一个很好的信息。我不知道重复使用操作会导致bug,因为我对此没有任何问题。不幸的是,我不能使用stopAllActions,因为这也会停止我的移动动作,不仅仅是在我特定情况下的动画,还要感谢另一个指针!