瞬时动作
CallFunc回调系列函数:可以在动作中做一些自定义处理,其本质上就是一个被封装为动作的回调函数,一般是同其他动作组合使用的,很重要很常用
CallFunc:回调无参数
CallFunc* call = CallFunc::create([]{CCLOG("called");});
CallFunc* call2 = CallFunc::create(CC_CALLBACK_0(T020402Action::callFunc, this));
this->runAction(call2);
CallFuncN:回调有1个参数 Node*
CallFuncN* callFunc = CallFuncN::create([](Node*){});
还有个CallFuncND,但是是旧版本的函数,新的不用了
CallFunc和Sequence一起可以做多精灵连续触发动作,即精灵2的动作可以由精灵1的动作触发,当精灵1结束动作时,用CallFunc调用精灵2的动作runAction。
Sprite* sprite1 = Sprite::create("Images/blocks.png");
Sprite* sprite2 = Sprite::create("Images/blocks.png");
sprite2->setTag(100); addChild(sprite1); addChild(sprite2);
sprite1->setPosition(100,100);
sprite2->setPosition(200,200);
MoveBy* move = MoveBy::create(2.0, Vec2(100, 100));
CallFunc* callFunc = CallFunc::create([&]{
getChildByTag(100)->runAction(RotateBy::create(5.0,360));});
sprite1->runAction(Sequence::createWithTwoActions(move,callFunc)); //这里用了Sequence的另外一个create函数,不必结尾NULL。
TargetAction:将精灵和动作封装起来为一个TargetAction动作,以便操作,同样和Sequence一起也可以实现(callFunc+Sequence)多精灵连续触发动作
Sprite* sprite1 = Sprite::create("Images/blocks.png");
Sprite* sprite2 = Sprite::create("Images/blocks.png");
sprite2->setTag(100); addChild(sprite1); addChild(sprite2);
sprite1->setPosition(100,100); sprite2->setPosition(200, 200);
MoveBy* move = MoveBy::create(2.0, Vec2(100, 100));
RotateBy* r = RotateBy::create(5.0, 360);
TargetedAction* action1 = TargetedAction::create(sprite1,move);
TargetedAction* action2 = TargetedAction::create(sprite2,r);
Sequence* seq = Sequence::create(action1,action2, NULL);
this->runAction(seq);运行只能由Layer层来搞了,当然任何节点都可以
动作干预
暂停动作:Node::Pause()其实是停止了动作,定时以及触摸
如果只想暂停目标节点的动作用:_actionManager->pauseTarget(Node*)