瘸腿蛤蟆笔记20-cocos2d-x-3.2 通过TargetedAction绑定动作到精灵

转载标明出处:http://write.blog.csdn.net/postedit/38459275

上篇回顾

         上篇中,蛤蟆学习了如何将屏幕跟踪正在快速运动的精灵。妈妈再也不用担心我的小精灵跑掉了。

这次蛤蟆学习了另一个比较好用的类TargetedAction。

 

理论介绍

首先我们来看下 继承关系如下。

瘸腿蛤蟆笔记20-cocos2d-x-3.2 通过TargetedAction绑定动作到精灵_第1张图片

         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);

         下伙伴们如果好奇可以深入之。

总结

         本次蛤蟆记录了如何将动作绑定到精灵上。这样我们在调用动作的时候,那些被绑定动作的精灵就会动起来。这样我们可以通过动作关联几个精灵了。

你可能感兴趣的:(瘸腿蛤蟆笔记20-cocos2d-x-3.2 通过TargetedAction绑定动作到精灵)