我正在尝试制作太空入侵者克隆。在这样做的时候,我很难将入侵者组合在一起,以便他们同时移动。这是因为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。
答案 0 :(得分:0)
如何将所有入侵者添加到一个精灵中,比如说“InvaderGroup”?所有转换(并且需要引用一次,但很可能也是所有的动作)都可以保证也可以计算给孩子,所以不用担心,我想。
如此多的入侵者单独关注事件听起来像开销,特别是结果运动不应该单独决定。如果您愿意,可以使用自己的Sprite子类,但只是为了移动它们,这是不必要的。
P.S。 如果你想要它们,你的入侵者仍然可以单独漫游,只是坐标将参考父级精灵。