1. 程式人生 > >cocos2d-x中,多個精靈執行同樣的動作

cocos2d-x中,多個精靈執行同樣的動作

簡而言之:雖然是“同樣”(從效果來說)的動作,但是每個精靈必須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);
開始的圖和之前一樣,結果如圖(三個精靈都到達目的地):