Partage
  • Partager sur Facebook
  • Partager sur Twitter

Air hockey

Problème pour les collisions

    25 mai 2006 à 17:33:15

    Bonjour,

    Je n'arrive pas à gérer les collisions pour mon jeu "Air Hockey". Voici mon petit code (pas fini du tout)


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include "constantes.h"

    void collisionMur(int carte[][HAUTEUR_FENETRE], SDL_Rect *p);
    void collisionPalais(int carte[][HAUTEUR_FENETRE],SDL_Rect *pJ, SDL_Rect *pP);

    void jouer(SDL_Surface* ecran)
    {
        SDL_Surface *plateforme=NULL, *jBleu=NULL, *jRouge=NULL, *palais=NULL;
        SDL_Rect pos, posJBleu, posJRouge, posPalais;
        SDL_Event event;
        int continuer = 1, boutonGaucheActive=0, angle=0;
        int carte[LARGEUR_FENETRE][HAUTEUR_FENETRE] = {0};


        /* Mise en mémoire des sprites */
        plateforme = IMG_Load("plateforme.jpg");
        jBleu = IMG_Load("Jbleu.png");
        jRouge = IMG_Load("Jrouge.png");
        palais = IMG_Load("palais.png");


        pos.x = 0;
        pos.y = 0;
        posPalais.x = 400;
        posPalais.y = 180;
        posJBleu.x = 500;
        posJBleu.y = HAUTEUR_FENETRE / 2 - 50;
        posJRouge.x = 100;
        posJRouge.y = HAUTEUR_FENETRE / 2 - 50;

        SDL_ShowCursor(SDL_DISABLE);

        while(continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                break;

                break;

                case SDL_MOUSEMOTION:
                    posJBleu.x = event.motion.x - 30;
                    posJBleu.y = event.motion.y - 30;
                    collisionMur(carte,&posJBleu);
                    collisionPalais(carte,&posJBleu,&posPalais);
                break;
            }



            SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
            SDL_BlitSurface(plateforme,NULL,ecran,&pos);
            SDL_BlitSurface(palais,NULL,ecran,&posPalais);
            SDL_BlitSurface(jBleu,NULL,ecran,&posJBleu);
            SDL_BlitSurface(jRouge,NULL,ecran,&posJRouge);
            SDL_Flip(ecran);
        }
        SDL_FreeSurface(plateforme);
        SDL_FreeSurface(jBleu);
        SDL_FreeSurface(jRouge);
        SDL_FreeSurface(palais);

    }

    void collisionMur(int carte[][HAUTEUR_FENETRE], SDL_Rect *p)
    {
        /* Collision avec les murs */
        if (p->x < 350) p->x = 350;
        if (p->x > 609) p->x = 609;
        if (p->y < 31)  p->y = 31;
        if (p->y > 309) p->y = 309;
    }

    void collisionPalais(int carte[][HAUTEUR_FENETRE],SDL_Rect *pJ, SDL_Rect *pP)
    {
        /* pJ = position Joueur */
        /* pP = position Palais */

        if (pJ->x == pP->x + 41) // taille du palais: 40 px sur 40
            pJ->x = pJ->x;
        if (pJ->x == pP-> x - 41)
            pJ->x = pJ->x;
    }


    Etant donné que mes collision avec le palais juste en X ne marchent pas, je n'ai pas continué. S'il vous plait, je suis carément perdu je ne comprends vraiment pas comment faire. Aidez-moi :(

    Merci d'avance, SeyZ !
    • Partager sur Facebook
    • Partager sur Twitter
      26 mai 2006 à 15:19:43

      Contacte moi par MP, je te donnerais un avant gout des collisions.
      • Partager sur Facebook
      • Partager sur Twitter
        28 mai 2006 à 0:00:44

        Faut que tu mette >= ou <= à la place de == car ça peut est un peu plus ( ça ne passe pas forcément au bon moment ).
        • Partager sur Facebook
        • Partager sur Twitter

        Air hockey

        × 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