如何一次移动所有精灵:Cocos2dx v3 C ++

时间:2016-03-06 03:11:42

标签: c++ cocos2d-x-3.0

我正在尝试制作太空入侵者克隆。在这样做的时候,我很难将入侵者组合在一起,以便他们同时移动。这是因为CCLayer和CCNode在cocos2dx中的v3.1中都被弃用了。我将精灵保存到一个可以迭代的矢量中,但是当我尝试移动它们时,一次只能移动一个。我需要将它们组合在一起,这样我就可以立即将它们全部移动。

void Gameplay::moveInvaders(){
    auto moveLeft = MoveBy::create(2, Vec2(-1, 0));
    auto moveRight = MoveBy::create(2, Vec2(1, 0));
    auto moveDown = MoveBy::create(2, Vec2(0, 1));
    auto stay = MoveBy::create(20, Vec2(0,0));

    // create a sequence with the actions and callbacks
    auto seq = Sequence::create(moveLeft, stay, moveRight, stay, moveDown, stay, nullptr);

    for (int i = 0; i < invaders.size(); i++) {
        invaders.at(i)->runAction(seq);
    }

更新:我最终弄明白了这个问题。我没有尝试使用序列,而是使用一些控制逻辑和系统计时器来编写动作脚本。

将此添加到您的init()函数:         this->schedule(schedule_selector(Gameplay::moveInvaders), 1.0);

形式:

this->schedule(schedule_selector(<Class_Name>::<function_To_call>), <number_of_frames_to_run>);

然后决定你想要在你的函数中做什么,这将经常被调用。我使用了几个boolean和int值来保持计数器。这样我就可以控制入侵者的移动方向。

希望这有助于其他人!我无法找到我需要知道的内容,因为cocos2dx的大部分教程都是使用Objective-C或Javascript。

1 个答案:

答案 0 :(得分:0)

如何将所有入侵者添加到一个精灵中,比如说“InvaderGroup”?所有转换(并且需要引用一次,但很可能也是所有的动作)都可以保证也可以计算给孩子,所以不用担心,我想。

如此多的入侵者单独关注事件听起来像开销,特别是结果运动不应该单独决定。如果您愿意,可以使用自己的Sprite子类,但只是为了移动它们,这是不必要的。

P.S。 如果你想要它们,你的入侵者仍然可以单独漫游,只是坐标将参考父级精灵。