类图
基本动作
先拿延时动作开始:继承自 ActionInterval的动作
Sprite* sprite2 = Sprite::create("Images/blocks.png"); addChild(sprite2);
MoveBy* moveBy = MoveBy::create(3.0f, Vec2(300, 300)); moveBy->setTag(100);
sprite->runAction(moveBy);
创建精灵——》创建动作——》精灵runAction动作
MoveBy 和MoveTo 前一个是相对坐标,即x和y分别增加300,后一个是绝对坐标,移动到300,300 。参数3.0f表示动画时长。
动作接口:
runAction是Node的属性,将动作放入了动作队列并调用这个Action的StratWithTarget。由_actionManager这个单例管理控制各种Action。Node还有StopAction系列和getActionByTag系列函数。runAction有返回值的,返回值就是运行的这个Action
注:stopAllActions只是停止了该节点的所有动作,并非所有节点动作。可以通过另一个节点停掉其他节点的Action(通过stopByTag等)
因为Action继承自Ref和Cloneable类,所有Action都有克隆功能:
MoveBy* moveBy2 =moveBy->clone();可以将一个Action克隆到另一个
一个动作是不能同时被2个精灵实现的,因为每个动作配套了精灵和动作的绑定关联,如果2个动作同时引用一个动作,会混乱。
Action的方法:
Action::reverse()函数可以翻转动作(反向动作):MoveBy* back =moveBy->reverse();(当给一个精灵做了很多的复杂动作时,这个做原路返回很好)
Action::startWithTarget(Node *target); target就是动作的目标精灵。
Action::step(float dt);每帧检查,并变更位置,动作的实现者但是不能被重载
Action::update(float time);每帧检查并变更位置,可以重载。
动作实现:
通过MoveBy::update(floatt)和 MoveBy::startWithTarget(Node *target)控制实现的
注意:非瞬时动作是有动作表现时间的,所以如果要删除动作,一定要考虑动作是否做完。