【发布时间】:2012-05-01 16:37:14
【问题描述】:
我有一个在场景中使用的 CCSprite,并创建了多个 CCAnimation 动作以使用单个 CCSpriteFrameCache sharedSpriteFrameCache 应用到它。虽然一切正常并且我可以在动画之间切换,但我觉得我做得很糟糕,我想通过检索 CCSprite 上正在运行的动作来简化我的代码,以便在运行下一个动作之前单独停止它们它。
为了帮助创建一些上下文,让我们假设以下情况:
我们有一个名为 mySprite 的 CCSprite
我们定义了 3 个独立的 CCAnimation 动作,分别用于向右行走、向左行走和向前坐着,分别称为:actionAnimWalkRight、actionAnimWalkLeft 和 actionAnimSitForward。
- 我们希望精灵在有人触摸 mySprite 右侧的屏幕时向右走,当有人触摸 mySprite 左侧的屏幕时向左走,当有人触摸 mySprite 时坐下。
我用来完成此操作的方法如下:
- 将 CCSprite 作为孩子放置在场景中。
- 使用以下命令告诉精灵运行一个动作:[self runAction:actionWalkRight];
- 当我想在有人触摸后更改动作时,我有一个名为 stopAllAnimationActions 的方法,我会在应用新动作之前调用该方法,以停止任何动画动作,无论正在运行什么。基本上列出了我定义的所有 CCAnimation/CCActions 并单独停止每个,因为我不想使用 stopAllActions。如下:[self stopAction:actionWalkRight]; [self stopAction:actionWalkLeft]; [self stopAction:actionSitForward];
- 然后我在上述方法触发后应用新动画:[self runAction:actionWalkLeft];
虽然这行得通,但它似乎是一个糟糕的设计来停止我知道没有运行的项目,因为我不知道到底是什么在运行。因此,仅在非常复杂的情况下寻找建议和最佳推荐做法来执行此类操作,因此很难跟踪每一种可能的情况。任何反馈将不胜感激。
【问题讨论】:
标签: cocos2d-iphone