Cocos2d-x游戏开发实战精解
上QQ阅读APP看书,第一时间看更新

5.4 让主角跑起来

在游戏开发中常常还需要进行一些比本章之前所介绍的更加复杂的动作,比如说人物的行走、跳跃等。虽然可以通过将人物或者怪物分解成不同的部分,然后再进行组合,但这样无疑是非常麻烦的。那么有没有简单一点的方法呢?答案当然是肯定的。

可以先回忆一下早期的电影是怎样实现的。早期的摄像机其实就是一台可以进行连拍的相机,可以快速地拍摄一组连续的画面。而放映机则是通过快速地切换来展示这些照片,这就给了观众电影中的风景、人物在动的假象。在Cocos2d-x中,也可以使用类似的方法来实现人物的运动。

在实现该功能之前,首先要准备一组连续的图片,并将它们按照一定的规律进行命名,如图5-8所示。可以在源文件ChapterFive04项目的Resources目录下复制此素材文件使用。

图5-8 人物行走动画的素材

在范例5-4中就展示了如何让这8张图片连续地进行切换,以达到人物行走动画的目的。

【范例5-4】在Cocos2d-x中通过动画实现人物行走的功能。

01 auto* sprite = Sprite::create("run1.png");
02      sprite->setPosition(320, 180);
03      addChild(sprite);
04      auto* animation = Animation::create();
05      for (int i = 1; i < 9; ++i)
06      {
07              char s[20] = { 0 };
08              sprintf(s, "run%d.png", i);
09              animation->addSpriteFrameWithFile(s);
10      }
11      animation->setLoops(-1);
12      animation->setDelayPerUnit(0.1f);
13      auto* action = Animate::create(animation);
14      sprite->runAction(action);

运行之后可以看到如图5-9所示的画面中,主角人物在原地做着行走的动作,读者也可以参考之前介绍的同时执行两个动作的方法,让它实现真正的“行走”效果。

图5-9 在Cocos2d-x中通过动画实现人物行走效果

要实现这样的效果,首先要创建一个Animation类型的对象,如范例第04行所示。然后可以将素材中的图片通过循环一帧一帧地加入到里面,如范例第05~10行所示。第09行就是将帧加入到Animation对象中时所进行的操作。最后使用create方法创建一个Animate对象然后执行就可以了,如范例第13行所示。

除此之外,还需要注意第11行setLoops方法中的参数,其作用是设置动画执行的次数,当为–1时则表示无限执行。第12行的作用则是设置每一帧被切换的频率,简单地说就是动画播放的速度,这个值越大,动画播放就越快。