我正在試圖製作一個太空侵略者克隆。在這樣做的時候,我很難將入侵者分組在一起,以便他們同時移動。這是因爲CCLayer和CCNode都在cocos2dx的v3.1中被棄用。我將我的精靈保存爲一個可以迭代的矢量,但是當我嘗試移動它們時,只能一次移動一個。我需要將它們組合在一起,以便我可以一次性移動它們。如何一次移動所有的精靈:Cocos2dx v3 C++
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>);
然後決定你想要在你的函數,將是通常被稱爲做什麼。我使用了幾個布爾值和整數值來保留一個計數器。這樣我就可以控制入侵者移動的方向。
希望這可以幫助別人!我找不到我需要知道的東西,因爲大多數的cocos2dx教程都在Objective-C或Javascript中。
讓我猜測,你的'runAction'函數不僅會移動精靈,還會重新顯示它?你需要分開移動和顯示。 –
噢,還有一點表現提示(性能對遊戲很重要,或者我聽說過;)):在調用函數之間,moveLeft,moveRight,moveDown和stay等變量不會改變,所以爲什麼重新爲他們打電話?相反,使它們成爲'靜態'(甚至可能是'const'),它們只會被創建一次,所有對該函數的調用都將使用相同的變量。 –
謝謝!截至目前爲止,只有一個個體精靈會移動,然後似乎沒有其他任何東西移動。儘管原始精靈永遠不會回到它的位置。有沒有辦法將所有這些精靈分配給單個對象,以便我可以一次移動它們?當他們與玩家的子彈相撞時,我會需要他們。先謝謝了! – Speakeasys