【问题标题】:How To Retrieve Actions From Sprite In cocos2d如何在 cocos2d 中从 Sprite 中检索动作
【发布时间】:2012-05-01 16:37:14
【问题描述】:

我有一个在场景中使用的 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。如下:[self stopAction:actionWalkRight]; [self stopAction:actionWalkLeft]; [self stopAction:actionSitForward];
  4. 然后我在上述方法触发后应用新动画:[self runAction:actionWalkLeft];

虽然这行得通,但它似乎是一个糟糕的设计来停止我知道没有运行的项目,因为我不知道到底是什么在运行。因此,仅在非常复杂的情况下寻找建议和最佳推荐做法来执行此类操作,因此很难跟踪每一种可能的情况。任何反馈将不胜感激。

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

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

    Cocos 进行了很好的优化,像 stopAllActions 这样的功能并不是性能消耗。实际上,它可能会比您的方法更快。

    【讨论】:

    • 谢谢 andrews...这也是很好的信息。我不知道重复使用操作可能会导致错误,因为我对此没有任何问题。不幸的是,我不能使用 stopAllActions,因为这也会停止我的移动动作,不仅是我特定情况下的动画,而且感谢其他指针!
    【解决方案2】:

    在创建动作时,使用常量设置该动作的标签:

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

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

    [self stopActionByTag:kCurrentAction];
    

    【讨论】:

    • 谢谢赛卡特!这很有帮助,因为我没有考虑过使用通用标签来检索它。这是一个很好的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多