简而言之:虽然是“同样”(从效果来说)的动作,但是每个精灵必须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.25)); //添加到层中显示 this->addChild(s1); this->addChild(s2); this->addChild(s3); //创建动作,移动到屏幕右边3/4处的中心位置 auto action1 = MoveTo::create(3,visibleSize.height * 0.5)); auto action2 = MoveTo::create(3,visibleSize.height * 0.5)); auto action3 = MoveTo::create(3,visibleSize.height * 0.5)); //三个精灵执行这个动作 s1->runAction(action1); s2->runAction(action2); s3->runAction(action3);开始的图和之前一样,结果如图(三个精灵都到达目的地):