Unhandled exception at 0x0FCFCAB6 (ucrtbased.dll) in SpaceShip.exe
Bonjour!
Je suis en train de programmer un jeu où des invaders apparaissent au haut de l'écran et qu'ils descendent. Le vaisseau (personnage principal) peut se déplacer en X seulement et appuyer sur la barre espace.
Lorsqu'il appuie sur space bar, un missile apparait et monte vers le haut de l'écran. Si le missile touche un enemy, le missile et l'enemy disparaissent. Tout marche bien, sauf qu'une erreur majeure semble être présente ici.
Effectivement, lorsque je "spam" la barre espace pour lancer plusieurs missile, un crash survient parfois au niveau des collisions disant:
Unhandled exception at 0x0FCFCAB6 (ucrtbased.dll) in SpaceShip.exe: An invalid parameter was passed to a function that considers invalid parameters fatal. occurred
J'ai pourtant beau vérifier mes ranges de vectors (vector d'enemy et vector de shoot), il n'y a pas de dépassement du range...
Fonction de collision:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
void checkCollisions(character Character, vector<shoot> &Shoot, vector<enemy> &Enemies, bool &gameover) {
//Collision enemy - Character
for (int i = 0; i < Enemies.size(); i++) {
//Compteur condition au lieu de faire une vérification imbriquée
int CompteurCondition = 0;
if (Enemies[i].getY() + Enemies[i].getHeight() >= Character.getY() && Enemies[i].getY() + Enemies[i].getHeight() <= Character.getY() + Character.getHeight()) {
CompteurCondition++;
}
else if (Enemies[i].getY() <= Character.getY() + Character.getHeight() && Enemies[i].getY() >= Character.getY()) {
CompteurCondition++;
}
if (Enemies[i].getX() + Enemies[i].getWidth() >= Character.getX() && Enemies[i].getX() + Enemies[i].getWidth() <= Character.getX() + Character.getWidth()) {
CompteurCondition++;
}
else if (Enemies[i].getX() <= Character.getX() + Character.getWidth() && Enemies[i].getX() >= Character.getX()) {
CompteurCondition++;
}
//Si au moins deux conditions sont vraies
if (CompteurCondition >= 2) {
//Afficher Game Over etc...
gameover = true;
}
else {
}
}
//Collision enemy - shoot
for (int i = 0; i < Enemies.size(); i++) {
for (int j = 0; j < Shoot.size(); j++) {
int ConditionEnemy = 0;
if (Enemies[i].getY() + Enemies[i].getHeight() >= Shoot[j].getY() && Enemies[i].getY() + Enemies[i].getHeight() <= Shoot[j].getY() + Shoot[j].getHeight()) {
ConditionEnemy++;
}
else if (Enemies[i].getY() <= Shoot[j].getY() + Shoot[j].getHeight() && Enemies[i].getY() >= Shoot[j].getY()) {
ConditionEnemy++;
}
if (Enemies[i].getX() + Enemies[i].getWidth() >= Shoot[j].getX() && Enemies[i].getX() + Enemies[i].getWidth() <= Shoot[j].getX() + Shoot[j].getWidth()) {
ConditionEnemy++;
}
else if (Enemies[i].getX() <= Shoot[j].getX() + Shoot[j].getWidth() && Enemies[i].getX() >= Shoot[j].getX()) {
ConditionEnemy++;
}
//Si au moins deux conditions sont vraies : clear la case des vector Enemies et Shoot
if (ConditionEnemy >= 2) {
Enemies.erase(Enemies.begin() + i);
Shoot.erase(Shoot.begin() + j);
}
else {
}
}
}
} |
Classe enemy:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
class enemy : public entity
{
public:
enemy();
~enemy();
void displayEnemy();
void moveEnemy();
};
enemy::enemy()
{
x = rand() % Width;
y = 0;
image = ChargerImage("enemy.bmp");
}
enemy::~enemy()
{
}
void enemy::displayEnemy() {
AfficherImage(image, x, y);
}
void enemy::moveEnemy() {
y = y + 1;
} |
Classe Shoot:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
class shoot : public entity
{
public:
shoot::shoot(character Character);
shoot();
~shoot();
void displayShoot();
void moveShoot();
};
shoot::shoot(character Character)
{
x = Character.getX();
y = Character.getY() - 1;
image = ChargerImage("shoot.bmp");
}
shoot::shoot() {
}
shoot::~shoot()
{
}
void shoot::moveShoot() {
y = y - 5;
}
void shoot::displayShoot() {
AfficherImage(image, x, y);
} |
Merci énormément!