Witam,
Od pewnego czasu tworzę mini gierkę, à la Space Invaders w SFML'u. Przeciwników z klasy Enemy (jest ich 10) wrzuciłem do vectora, kiedy następuje zderzenie pocisku z przeciwnikiem następuje usunięcie go z vectora przy użyciu funkcją erase.
Kiedy odpalam grę i wystrzeliwuje pocisk w przeciwnika gra się crashuje i wyskakuje mi taki oto komunikat:
"ConsoleApplication1.exe has triggered a breakpoint", wskazując właśnie na funkcję erase.
// Wykrywanie kolizji pocisku z przeciwnikiem i usunięcie go z vectora
for(int i=0; i<= tab.size()-1; i++)
{
if (sprite_bullet.getGlobalBounds().intersects(tab[i].getBound()))
{
//tu wskazuje na błąd
tab.erase(tab.begin() + i-1);
}
}
//Część klasy Enemy
#include "Enemy.h"
#include <iostream>
void Enemy::update(float dt)
{}
void Enemy::draw(sf::RenderWindow &window)
{
window.draw(enemy);
}
void Enemy::spos(float x, float y)
{
enemy.setPosition(x,y);
}
void Enemy::movel(sf::Time time)
{
enemy.move(sf::Vector2f(-0.1 * time.asMilliseconds(), 0));
}
void Enemy::movep(sf::Time time)
{
enemy.move(sf::Vector2f(0.1 * time.asMilliseconds(), 0));
}
sf::FloatRect Enemy::getBound()
{
sf::FloatRect y = enemy.getGlobalBounds();
return y;
}
// Rysowanie przeciwników
for (int i = 0; i <= tab.size() - 1; i++)
{
tab[i].draw(window);
}
Jeśli potrzebujecie więcej kodu lub jakieś zdjęcia gry czy coś takiego to tylko napiszcie, a wyślę.
Tak wygląda gra, kiedy następuje crash.
Tak wygląda cały komunikat:
A po kliknięciu Continue: