在cocos2d-x中切换精灵动画

时间:2013-08-01 16:21:35

标签: c++ animation sprite cocos2d-x

我有一个“GameCharacter”类,我在游戏中为主角添加了一个精灵,我正确加载了帧和动画。我可以通过单次触摸或滑动手势在动画之间切换。现在我可以在动画之间轮换。

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

_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[]只是一个保留CCAnimate*个对象的向量(我在以后销毁GameCharacter时会释放它们)。

我有2个空闲动画,我想在它们之间随机切换,例如,我想要“排队”第一个动画3到5次,第二个动画1到2次,并且像这样永远重复...也,我想打断这个“无限随机空闲动画”,触摸使角色运行另一个动画直到它结束(例如一个跳跃动画),当它结束时,只需进入空闲动画。我不知道我是否解释得很好,希望你能理解我。

动画的ID为:

  • 0-idle1(3帧)
  • 1-idle2(6帧)
  • 2-jump(12帧)
  • 3步行(12帧)

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

我稍后会解决步行动画。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我建议使用schedule方法定期运行idle逻辑,如下所示.-

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

idleLogic方法中,您可以检查自己的角色是否在跑步或跳跃,如果是,请为您的空闲动画阵列随机index,然后运行_animation[index] 。跟踪角色被停止的时间也是一个好主意,这样你就不会运行任何空闲动画,除非iddleTime >= MIN_IDLE_TIME

希望它有所帮助。