上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轴进行转动,而之前提到过的可以通过缩放来实现翻牌的效果,实际上通过旋转来实现更好。