您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x中,多个精灵执行同样的动作

2015-09-16 15:22 579 查看
简而言之:虽然是“同样”(从效果来说)的动作,但是每个精灵必须run不同的action对象

例如:需要三个精灵同时跑到一个点去,使用动作来完成。

//创建3个精灵
auto s1 = Sprite::create("CloseNormal.png");
auto s2 = Sprite::create("CloseNormal.png");
auto s3 = Sprite::create("CloseNormal.png");
//设置位置在屏幕左边1/4处,分上中下来放
s1->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.75));
s2->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.5));
s3->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.25));
//添加到层中显示
this->addChild(s1);
this->addChild(s2);
this->addChild(s3);
//创建动作,移动到屏幕右边3/4处的中心位置
auto action = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
//三个精灵执行这个动作
s1->runAction(action);
s2->runAction(action);
s3->runAction(action);结果:只有s3跑到目的地,s1和s2都没动。
如图:

开始时:



运动结束:



因为三个精灵使用了同一个action对象。下面来修改一下,给每个精灵创建一个对象。

<pre name="code" class="cpp">//创建3个精灵
auto s1 = Sprite::create("CloseNormal.png");
auto s2 = Sprite::create("CloseNormal.png");
auto s3 = Sprite::create("CloseNormal.png");
//设置位置在屏幕左边1/4处,分上中下来放
s1->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.75));
s2->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.5));
s3->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.25));
//添加到层中显示
this->addChild(s1);
this->addChild(s2);
this->addChild(s3);
//创建动作,移动到屏幕右边3/4处的中心位置
auto action1 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
auto action2 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
auto action3 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
//三个精灵执行这个动作
s1->runAction(action1);
s2->runAction(action2);
s3->runAction(action3);

开始的图和之前一样,结果如图(三个精灵都到达目的地):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息