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

How to Move All Sprites At Once: Cocos2dx v3 C++

我正在尝试制作一个 Space Invaders 克隆。这样做时,我很难将入侵者分组在一起,以便它们同时移动 time.This 是由于 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.

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

那么多入侵者单独守望事件听起来像是开销,尤其是结果移动不应该是单独决定的。如果愿意,您可以使用自己的 Sprite 子类,但不需要移动它们。

P.S。 如果您愿意,您的入侵者仍然可以单独漫游,只是 co-ordinates 将参考 parent Sprite。