Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/05/2006, à 19:29

lost-in-the-shell

[Résolu][SDL] Test d'abscisse foireux

Bonjour,
Je développe (ou du moins j'essaie) un jeu à la Space Invaders en C/SDL.
Pour prendre en compte l'élimination des ennemis, j'ai créé une fonction testRencontreEnnemi, dont voici la définition :

int testRencontreEnnemi(SDL_Rect positionProjectile, SDL_Rect positionEnnemi, int * boolTir)
{
     int compteurTRE = 0, rencontreOK = 1;
     if(positionProjectile.y <= positionEnnemi.y + positionEnnemi.h)
     {
        for(compteurTRE = 0; compteurTRE <= positionEnnemi.w; compteurTRE++)
         {
           if(positionProjectile.x == positionEnnemi.x + compteurTRE)
            {
             rencontreOK = 0;
             *boolTir = 0;
            }
         }
     }
	 return rencontreOK;
}

Je l'ai ensuite utilisée dans mon jeu de la manière suivante :

if(boolTir)
  SDL_BlitSurface(tir, NULL, ecran, &positionProjectile);

Pour information, boolTir vaut 1 si un projectile a été lancé, et vaut 0 si rien n'a été lancé.

Dans un cas de figure pareil :
space-invaders.png
Pourquoi testRencontreEnnemi retourne 0 ? Comment faire pour qu'il ne retourne pas cette valeur lors d'un cas pareil ?

Merci de vous pencher sur mes questions big_smile
lost-in-the-shell

PS : Pour installer la SDL / compiler avec la SDL : http://doc.ubuntu-fr.org/applications/sdl
PS 2 : Tarball des sources et des fichiers nécessaires au jeu ici. Désolé si c'est pas commenté, mais j'ai fait de mon mieux pour que le code soit compréhensible.

EDIT : Résolu.

Dernière modification par lost-in-the-shell (Le 14/05/2006, à 19:59)


Linux user #401253 - Ubuntu user #3023 .
Nick sur IRC : naji.
Pensez à adhérer au Comité de lutte contre le SMS.

Hors ligne

#2 Le 13/05/2006, à 21:40

ffomnislash

Re : [Résolu][SDL] Test d'abscisse foireux

int testRencontreEnnemi(SDL_Rect positionProjectile, SDL_Rect positionEnnemi, int * boolTir)
{
     int compteurTRE = 0, rencontreOK = 1;
     if(positionProjectile.y >= positionEnnemi.y && positionProjectile.y <= positionEnnemi.y + positionEnnemi.h)
     {
        for(compteurTRE = 0; compteurTRE <= positionEnnemi.w; compteurTRE++)
         {
           if(positionProjectile.x == positionEnnemi.x + compteurTRE)
            {
             rencontreOK = 0;
             *boolTir = 0;
            }
         }
     }
     return rencontreOK;
}

Ce ne serait pas ca le pb ?

Dernière modification par ffomnislash (Le 13/05/2006, à 21:41)


-- Mon blog --

Hors ligne

#3 Le 14/05/2006, à 19:58

lost-in-the-shell

Re : [Résolu][SDL] Test d'abscisse foireux

Mais oui bien sûr ! J'avais pas fixé de limite minimale !
C'est certainement dû au fait que dans la première version, l'ennemi était blitté à y = 0, donc le test n'avait pas de grande importance.
Conclusion : un bout de code change, le reste suit.

PS : Merci big_smile .


Linux user #401253 - Ubuntu user #3023 .
Nick sur IRC : naji.
Pensez à adhérer au Comité de lutte contre le SMS.

Hors ligne