转载标明出处:http://blog.csdn.net/notbaron/article/details/38351467
上篇回顾
上篇中,蛤蟆学习了如何使用使用doxygen工具来创建离线的API手册。从此查找API函数就变得方便了。
这次蛤蟆要学习精灵的动作,各种动作。当然动画和动作时不一样的。动画只是精灵图片的变化,而动作时引擎提供的函数我们可以直接使用之。走起。
理论介绍
先看类的继承如下图 1所示:
Action继承的地位是不是很眼熟。没错,就是和之前所讲的Animation类是一个层次的。他们应该算成同一辈的。Action分为 ActionTimeLine,FiniteTimeAction,Follow,Speed 4种。
ActionTimeLine 直译过来就是动作时间线 的意思(这个类蛤蟆找不到资料也, 回头蛤蟆知道了再做几笔。而且本次几笔主要是将后面三项动作嘛)
FinitTimeAction表示时间有限动作。
Follow表示 跟随动作,类似RPG游戏中的一个精灵跟随另一个精灵。
Speed表示 可以设置动作的速度。
OK,我们来实践吧。我们先来操作下瞬时动作。
具体步骤
我们还是使用HelloWolrd项目。还是在 、
bool HelloWorld::init()函数中加入代码:
代码如下:
auto grossini =Sprite::create("ball.png");
grossini->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 +origin.y));
addChild(grossini,1);
//Sum of all action's duration is 1.5 second.
grossini->runAction(Sequence::create(
DelayTime::create(1.4f),
Place::create(Vec2(visibleSize.width/2+ origin.x+100, visibleSize.height/2 + origin.y+100)),
nullptr)
);
代码解释
好的,我们现在一起看下代码吧
auto grossini =Sprite::create("ball.png"); //首先创建一个精灵,通过图片ball.png
grossini->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 +origin.y)); //设置精灵位置在屏幕正中间
addChild(grossini,1);//添加精灵到HelloWorld层中
grossini->runAction(Sequence::create(
DelayTime::create(1.4f),
Place::create(Vec2(visibleSize.width/2+ origin.x+100, visibleSize.height/2 + origin.y+100)),
nullptr)
); //这个是一个复杂的函数,函数中包含函数,我们一一剖解之。
首先是精灵grossini调用runAction ,然后在runAction 中创建了Sequeuece。
Sequence表示将很多动作串联起来。这里串联了两个动作,一个是DelayTime表示延时几秒,一个Place表示瞬间移动到之前位置的右上方。最后需要一个nullptr来结束。
这样grossini就是顺序执行延迟1.4秒,然后瞬间移动到右上方。
其他的瞬时动画,小伙伴们需要尝试的话,只需要修改Place::create(Vec2(visibleSize.width/2+ origin.x+100, visibleSize.height/2 + origin.y+100)) 这个即可。
例如改成 FlipY::create(1) 。
总结
通过本笔记,我们学会精灵及基本动作,通过这些动作我们可以在游戏给我们的精灵设置各种动作了。不过其实一个游戏中常用的动作也就那么几个(这个纯属蛤蟆瞎猜)。
蛤蟆想了下,感觉源码提供的cpp-tests非常不错,接下去学习该项目。这样大家可以非常容易的在cpp-tests中找到自己想要的代码了。