转载标明出处:http://write.blog.csdn.net/postedit/38459275
上篇回顾
上篇中,蛤蟆学习了如何将屏幕跟踪正在快速运动的精灵。妈妈再也不用担心我的小精灵跑掉了。
这次蛤蟆学习了另一个比较好用的类TargetedAction。
理论介绍
首先我们来看下 继承关系如下。
TargetedAction类,主要作用是可以用具体的动作和强制的目标来创建动作。
我们可以让这个动作在创建的时候运行在一个指定的目标上,而不是运行在通过runAction指定的目标
具体步骤
我们还是在HelloWorld.cpp文件中找到
bool HelloWorld::init()函数,加入如下代码。
auto grossini =Sprite::create("grossini.png");
auto grossini2 =Sprite::create("grossini.png");
addChild(grossini,0, 2);
addChild(grossini2,0, 2);
auto s =Director::getInstance()->getWinSize();
grossini->setPosition(Vec2(0+s.width/3, s.height / 2));
grossini2->setPosition(Vec2(0+s.width/2, s.height / 2));
auto jump1 =JumpBy::create(2,Vec2::ZERO,100,3);
auto jump2 = jump1->clone();
auto rot1 =RotateBy::create(1,360);
auto rot2 = rot1->clone();
auto t1 =TargetedAction::create(grossini, jump2);
auto t2 =TargetedAction::create(grossini, rot2);
auto seq =Sequence::create(jump1,t1, rot1, t2,nullptr);
auto always =RepeatForever::create(seq);
grossini2->runAction(always);
这段代码中其中只有grossini2精灵调用了runAction,但是实际上grossini和grossini2精灵都会动起来。因为在grossini2调用的动作里面,有2个动作是绑定道精灵grossini上的。
代码解释
下面我们来解释下代码的含义:
auto grossini =Sprite::create("grossini.png");//创建一个精灵 grossini
auto grossini2 =Sprite::create("grossini.png");//创建一个精灵 grossini2
addChild(grossini,0, 2);//添加精灵到HelloWorld层
addChild(grossini2,0, 2); //添加精灵到HelloWorld层
auto s =Director::getInstance()->getWinSize();//获取窗口大小
grossini->setPosition(Vec2(0+s.width/3, s.height / 2)); //设置精灵grossini的位置
grossini2->setPosition(Vec2(0+s.width/2, s.height / 2)); //设置精灵grossini2的位置
auto jump1 =JumpBy::create(2,Vec2::ZERO,100,3); //创建一个jump1动作
auto jump2 = jump1->clone();//创建一个jump2动作
auto rot1 =RotateBy::create(1,360); //创建一个rot1动作
auto rot2 = rot1->clone();//创建一个rot2动作
auto t1 =TargetedAction::create(grossini, jump2); //添加动作jump2到精灵grossini,返回动作t1
auto t2 =TargetedAction::create(grossini, rot2); //添加动作rot2到精灵grossini,返回动作t2
auto seq =Sequence::create(jump1,t1, rot1, t2,nullptr); //创建序列动作seq,包括动作t1,t2.
auto always =RepeatForever::create(seq); //通过序列动作seq创建反复运行动作always
grossini2->runAction(always); //精灵grossini2调用动作always(其中包含了动作t1,t2)
ok,完毕。
本次蛤蟆学习的主要的代码是
auto t1 = TargetedAction::create(grossini,jump2);
auto t2 = TargetedAction::create(grossini, rot2);
下伙伴们如果好奇可以深入之。
总结
本次蛤蟆记录了如何将动作绑定到精灵上。这样我们在调用动作的时候,那些被绑定动作的精灵就会动起来。这样我们可以通过动作关联几个精灵了。