我正在用C++和SFML製作遊戲。我有一個奇怪的錯誤,只要我在屏幕上有1個敵人和3個鏡頭,並且子彈與敵人碰撞,遊戲就會崩潰。我得到的錯誤是:SFML奇怪的拍攝錯誤
Expression: vector subscript out of range
我這是怎麼檢查的鏡頭和敵人之間的碰撞:
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);
}
}
}
「敵人」和「槍」是我插入在每x秒載體主循環。下面是該代碼:
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();
}
正如我所說的,當我有敵1和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