저는 C++과 SFML로 게임을 만들고 있습니다. 나는 이상한 버그가있다. 화면에 정확히 적 1 개와 총 3 개가 있고 적과 총알이 충돌 할 때마다 게임이 충돌한다. 이해가 오류가 있습니다 : 나는 모든 x 초에 삽입 벡터를SFML 이상한 슈팅 버그
for (int i = 0; i < enemies.size(); i++)
{
for (int s = 0; s < shots.size(); s++) {
if (Collision::PixelPerfectTest(enemies[i].getSprite(), shots[s].getSprite())) {
enemies[i].setHealth(enemies[i].getHealth() - player.getDamage());
if (enemies[i].getHealth() <= 0) {
enemies.erase(enemies.begin() + i);
}
shots.erase(shots.begin() + s);
}
}
}
"적"과 "샷"입니다
Expression: vector subscript out of range
이것은 내가 샷과 적 사이의 충돌을 검사하는 방법이다 메인 루프.
if (enemySpawner.getElapsedTime().asSeconds() >= 1.5f) {
enemies.push_back(Enemy(spriteManager.enemySprite));
std::cout << enemies.size() << " enemies" << std::endl;
enemySpawner.restart();
}
if (shotSpawner.getElapsedTime().asSeconds() >= 0.3f && sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
shots.push_back(Shot(spriteManager.shotSprite, player.getPosition(), *window));
std::cout << shots.size() << " shots" << std::endl;
shotSpawner.restart();
}
내가 말했듯이, 그렇지 않으면 잘 작동하는 것 같다, 내가 한 적 3 탄이있을 때이 만 발생 : 여기에 대한 코드입니다.
편집 : 이제 첫 번째 적군이 생성되면 게임이 정지됩니다.
//Shot vs enemy
for (auto eit = enemies.begin(); eit != enemies.end();)
{
for (auto sit = shots.begin(); sit != shots.end();) {
if (Collision::PixelPerfectTest((*eit).getSprite(), (*sit).getSprite())) {
(*eit).setHealth((*eit).getHealth() - player.getDamage());
if ((*eit).getHealth() <= 0) {
enemies.erase(eit);
shots.erase(sit);
}
shots.erase(sit);
eit = eit++;
sit = sit++;
}
}
}
고마워,하지만 지금은 다른 문제가 생겼어. 내 수정 된 게시물보기 – Wahoozel