我有一个“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/