Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction de Gestion de Collisions

Je ne comprends pas pourquoi elle ne marche pas...

Sujet résolu
    13 février 2008 à 15:15:44

    EDIT : Désolé le premier sujet à été envoyé sans faire exprès, ne pensez pas que je me répète ...



    Bonjour à tous !!!
    Je lance mon SOS sur ce forum, car après maints essais, je ne comprends toujours pas pourquoi cette fonction ne marche pas. :euh:
    Mon but est d'utiliser un algorithme très simple pour gérer les collisions...
    la condition, seule, fonctionne :

    1. if((pos1.x < pos2.x + pos2.w) && (pos1.x + pos1.w > pos2.x) &&
    2.            (pos1.y < pos2.y + pos2.h) && (pos1.y + pos1.h > pos2.y))
    3.             {
    4.                 // action à effectuer en cas de collision
    5.             }

    Lorsque je tente de l'incorporer dans une fonction pour améliorer la clarté du main, le programme s'éteint dès qu'il fait appel à la fonction ... :o

    main.c :
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <SDL/SDL.h>
    4. #include <SDL/SDL_image.h>
    5. #include "collisions.h"
    6. int main(int argc, char *argv[])
    7. {
    8.     SDL_Surface *screen = NULL, *zozor = NULL, *objectif = NULL;
    9.     SDL_Rect posZozor;
    10.     SDL_Rect posObjectif;
    11.     SDL_Event event;
    12.     int continuer = 1;
    13.     SDL_Init(SDL_INIT_VIDEO);
    14.     screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    15.     SDL_WM_SetCaption("Tests Collisions", NULL);
    16.     zozor = IMG_Load("zozor.bmp");
    17.     objectif = IMG_Load("objectif.png");
    18.     posZozor.x = 0;
    19.     posZozor.y = 0;
    20.     posObjectif.x = screen-> w/2 - objectif-> w/2;
    21.     posObjectif.y = screen-> h/2 - objectif-> h/2;
    22.     SDL_EnableKeyRepeat(1, 1);
    23.     while(continuer)
    24.     {
    25.         SDL_WaitEvent(&event);
    26.         switch(event.type)
    27.         {
    28.             case SDL_QUIT:
    29.                 continuer = 0;
    30.                 break;
    31.             case SDL_KEYDOWN:
    32.                 switch(event.key.keysym.sym)
    33.                 {
    34.                     case SDLK_ESCAPE:
    35.                         continuer = 0;
    36.                         break;
    37.                     case SDLK_UP:
    38.                         posZozor.y --;
    39.                         collisions(posZozor, posObjectif);
    40.                         break;
    41.                     case SDLK_DOWN:
    42.                         posZozor.y ++;
    43.                         collisions(posZozor, posObjectif);
    44.                         break;
    45.                     case SDLK_LEFT:
    46.                         posZozor.x --;
    47.                         collisions(posZozor, posObjectif);
    48.                         break;
    49.                     case SDLK_RIGHT:
    50.                         posZozor.x ++;
    51.                         collisions(posZozor, posObjectif);
    52.                         break;
    53.                 }
    54.         }
    55.         SDL_FillRect(screen, NULL, SDL_MapRGB(screen-> format, 255, 255, 255));
    56.         SDL_BlitSurface(objectif, NULL, screen, &posObjectif);
    57.         SDL_BlitSurface(zozor, NULL, screen, &posZozor);
    58.         SDL_Flip(screen);
    59.     }
    60.     SDL_FreeSurface(zozor);
    61.     SDL_FreeSurface(objectif);
    62.     SDL_Quit();
    63.     return EXIT_SUCCESS;
    64. }


    collisions.c :

    1. #include <SDL/SDL.h>
    2. void collisions(SDL_Rect *pos1, SDL_Rect *pos2)
    3. {
    4.         if((pos1->x < pos2->x + pos2->w) && (pos1->x + pos1->w > pos2->x) &&
    5.            (pos1->y < pos2->y + pos2->h) && (pos1->y + pos1->h > pos2->y))
    6.             {
    7.                 fprintf(stderr, "collision\n");
    8.                 pos1->x = 50;
    9.                 pos1->y = 50;
    10.             }
    11. }




    collisions.h

    1. #ifndef H_COLLISIONS
    2. #define H_COLLISIONS
    3. #include <SDL/SDL.h>
    4. void collisions(SDL_Rect *pos1, SDL_Rect *pos2);
    5. #endif


    Pouvez-vous m'aider s'il vous plait ?


    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2008 à 16:08:55

      collisions(posZozor, posObjectif);
      =>collisions(&posZozor, &posObjectif);
      • Partager sur Facebook
      • Partager sur Twitter
        13 février 2008 à 16:26:15

        Ça marche !!!

        Merci beaucoup, mais j'aurais du y penser moi meme.
        Va falloir que je retourne faire un tour du côté des pointeurs ...

        Je mets donc le sujet sur résolu...
        • Partager sur Facebook
        • Partager sur Twitter

        Fonction de Gestion de Collisions

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown