c++ - 在 cocos2d-x 中切换 Sprite 动画

标签 c++ animation sprite cocos2d-x

我有一个“GameCharacter”类,其中我有游戏中主要角色的 Sprite ,我正确加载了帧和动画。我可以通过单点触摸或滑动手势在动画之间切换。现在我可以在动画之间旋转。

在我场景的触摸功能中,我有这个:

_mychar->RunAnimation(id);

其中 id 是动画的 ID,只是一个整数,每次触摸都会更改。

该方法的工作原理如下:

void GameCharacter::RunAnimation(int a){

    _sprite->stopAllActions();
    if(a<_animation.size() && a>=0){
        _sprite->runAction( CCRepeatForever::create(_animation[a]));
    }
}

_animation[] 只是一个 vector ,其中保留了 CCAnimate* 对象(我稍后会在销毁 GameCharacter 时释放它们)。

我有2个空闲动画,我想在它们之间随机切换,例如我想“排队”第一个动画3到5次,第二个1到2次,一直这样重复......也,我想通过触摸来打断这个“无限随机空闲动画”,让角色运行另一个动画直到它结束(例如跳跃动画),当它结束时,就进入空闲动画。不知道我解释的对不对,希望你能理解。

动画的 id 是:

  • 0-idle1(3 帧)
  • 1-idle2(6 帧)
  • 2 跳(12 帧)
  • 3 步走(12 帧)

现在,我只需要能够让角色处于空闲状态(动画 0 和 1 之间的随机时间),每当触摸时,跳跃动画完成一次,最后空闲再次开始......

走路的动画我会在后面解决。

提前致谢!

最佳答案

我建议使用 schedule 方法定期运行您的 idle 逻辑,就像这样。-

this->schedule(schedule_selector(YourGameClass::idleLogic), FREQUENCY_IN_SECONDS);

在您的 idleLogic 方法中,您可以检查您的角色是否没有奔跑或跳跃,如果是,则为您的空闲动画数组获取一个随机的 index,并且运行 _animation[index]。跟踪您的角色停止了多长时间也是一个好主意,这样您就不会运行任何空闲动画,除非 iddleTime >= MIN_IDLE_TIME

希望对您有所帮助。

关于c++ - 在 cocos2d-x 中切换 Sprite 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17999444/

相关文章:

android - 在 libgdx 中将多个 Sprite 作为一个集群移动在一起

java - AndEngine AnimatedSprite 仅对第一个 Sprite 进行动画处理

c++ - 完全与 View 层无关的应用程序架构

c++ - 如果 std::vector::resize 的大小参数等于当前大小怎么办?

javascript - APNG num_plays 在 Firefox 中有效,但在 Chrome 中无效

jquery - 如何使用 jquery 为嵌套元素设置动画?

jquery - 在悬停时使用 li 中的 Sprite 图像

c++ - 将基类转换为其派生类之一?

c++ - linux makefile等效?重要的

ios - SpriteKit Actions.sks 文件需要预加载?