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

来源:互联网 发布:二手进口电动工具淘宝 编辑:程序博客网 时间:2024/05/16 19:22

简而言之:虽然是“同样”(从效果来说)的动作,但是每个精灵必须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);

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



0 0
原创粉丝点击