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

5.2 在Cocos2d-x中实现更加复杂的动作

在本章的开始曾经提到过,每一个复杂的运动都是由许多个简单的运动组合而成的,而在上一节中也介绍了怎样实现简单的动作。那么在本节将介绍如何将这些简单的动作组合在一起。

将动作组合在一起主要包括了两个方面:连续运动和组合运动。比如精灵先做直线运动从屏幕的左下角运动到右上角,然后再折返回起点,最后又放大一倍,就是连续运动。精灵在运动的同时又翻转就属于组合运动。范例5-2就展示了在Cocos2d-x中组合使用3个动作实现精灵滚动前进效果的例子,完整项目可参考源文件中本章目录下的项目ChapterFive02。

【范例5-2】在Cocos2d-x中使用较复杂的动作。

01 auto* m_sprite = Sprite::create("sprite.png");  //创建精灵
02      m_sprite->setPosition(100,180);                      //设置精灵初始位置
03      m_sprite->setScale(0.3f);                    //设置精灵大小
04      addChild(m_sprite);                             //将精灵加入到场景中
05      auto* moveto = MoveTo::create(2.5f,Vec2(540,200));      //移动的动作
06      auto* scaleto = ScaleTo::create(2.5f,0.5);              //放大的动作
07      auto* rotateby = RotateBy::create(2.5f, Vec3(0, 0, 240));   //旋转的动作
08      auo* action = Spawn::create(moveto,scaleto, rotateby, NULL); //同时执行3个动作
09      m_sprite->runAction(action);                                 //执行

运行程序之后,精灵的初始状态如图5-4所示,位于场景左侧,然后精灵将一边向右“滚动”、一边不断地膨胀,这实际就是精灵进行移动和旋转所形成的效果。运动完成的状态如图5-5所示。

图5-4 精灵的初始状态

图5-5 精灵运动最终的状态及方向路线

从范例中可以看出,将多个动作组合在一起使它们同时被执行的方法非常简单,只需要使用范例第08行所示的方法,将它们全部以参数的形式加入到Spawn类的create方法中去就可以了。

此外在范例的第07行用到了RotateBy类的create方法,它有两个参数,一个是动作执行的时间;另一个则是用一个三维向量来表示精灵分别绕x、y、z轴转动的角度。比如本例就是仅围绕z轴进行转动,而之前提到过的可以通过缩放来实现翻牌的效果,实际上通过旋转来实现更好。