1
我在SFML 2中做了一個簡單的遊戲,到目前爲止順利。我創建了兩個sf :: Sprite列表,一個用於敵人,一個用於激光。隨機產生的敵人離開屏幕,每當輸入時就會創建激光。我爲這兩個列表創建了一個碰撞循環並執行了我的代碼。沒有編譯時和運行時錯誤。激光與敵人的碰撞對前3到4名敵人都很好,但在此之後,碰撞不會發生。什麼可能導致這個問題?請幫助我。謝謝。這是我的代碼。兩個精靈列表的碰撞 - SFML 2.0
std::list<sf::Sprite>::iterator enemyit = enemy.begin(), next;
std::list<sf::Sprite>::iterator greenlaserit = greenlaser.begin(), reload;
while(enemyit != enemy.end())
{
next = enemyit;
next++;
while(greenlaserit != greenlaser.end())
{
reload = greenlaserit;
reload++;
if(enemyit->getGlobalBounds().intersects(greenlaserit->getGlobalBounds()))
{
enemy.erase(enemyit);
greenlaser.erase(greenlaserit);
++erased;
}
greenlaserit = reload;
}
enemyit = next;
}
我沒有使用C++ 11。但是,我會嘗試你的第二種方法。謝謝。 – WDRKKS
是否有什麼特別的原因讓你通過創建第二個變量(next,reload)來遍歷列表,然後立即迭代它?在我看來,這總是會跳過列表中的第一個元素。 – charzoc
這是爲了確保迭代器不會到達list :: end()。當我不使用第二個變量時,它會崩潰。 – WDRKKS