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
iterator가 list :: end()에 도달하지 않도록하는 것이 었습니다. 두 번째 변수를 사용하지 않으면 충돌이 발생합니다. – WDRKKS