IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Problème simple avec la SDL


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut Problème simple avec la SDL
    Yop,

    Bon bah comme le dit le titre j'ai un problème avec la SDL, plus particulièrement en ce qui concerne la gestion des évènements. J'ai écris un code avec deux surface, une immobile et une autre contrôlable avec les flèches du clavier.
    Celle contrôlable ne doit pas toucher celle immobile.
    Jusque là ça va. Mais ça se complique quand les deux surfaces se touchent: elle reste collé ensuite.
    Il y a aussi un deuxième problème, la surface mobile laisse une "trace" la ou elle passe.

    Si quelqu'un pourrai m'aider a corriger mon code ce serai cool, le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    SDL_Surface *Init();
     
    SDL_Surface *Surface1 = NULL;
    SDL_Surface *Surface2 = NULL;
    SDL_Surface *ecran    = NULL;
    Uint32 bleuElectrique;
    Uint32 roseBonbon;
    Uint32 vertPomme;
    int continuer = 1;
    SDL_Rect coord;
    SDL_Rect coord2;
    SDL_Event event;
    int main(int argc, char *argv[])
    {
    	ecran = Init();
        bleuElectrique = SDL_MapRGB(ecran->format, 22, 167, 255);
    	roseBonbon     = SDL_MapRGB(ecran->format, 255, 32, 222);
        vertPomme      = SDL_MapRGB(ecran->format, 0, 170, 0);
     
        Surface1 = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 220, 32, 0, 0, 0, 0);
        Surface2 = SDL_CreateRGBSurface(SDL_HWSURFACE, 110, 110, 32, 0, 0, 0, 0);
    	SDL_WM_SetCaption("SDL Test", NULL);
    	SDL_FillRect(Surface2, NULL, bleuElectrique);
    	SDL_FillRect(Surface1, NULL, vertPomme);
        SDL_FillRect(ecran, NULL, roseBonbon);
     
        coord.x  = ((640 / 2) - (220 / 2));
        coord.y  = ((480 / 2) - (220 / 2));
        coord2.x = 0;
        coord2.y = 0;
     
        SDL_EnableKeyRepeat(10, 1);
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_KEYDOWN:
                    if((event.key.keysym.sym == SDLK_UP) && ((((coord2.x + 110) < coord.x ) || ((coord2.x > (coord.x + 220)))) || (coord2.y > (coord.y + 220))))
                    {
                        coord2.y--;
                    }
     
                    else if((event.key.keysym.sym == SDLK_DOWN) && ((((coord2.x + 110) < coord.x ) || ((coord2.x > (coord.x + 220)))) || ((coord2.y + 110) < coord.y)))
                    {
                        coord2.y++;
                    }
                    else if((event.key.keysym.sym == SDLK_RIGHT) && ((((coord2.y + 110) < coord.y ) || ((coord2.y > (coord.y + 220)))) || ((coord2.x + 110) < coord.x)))
                    {
                        coord2.x++;
                    }
                    else if((event.key.keysym.sym == SDLK_LEFT) && ((((coord2.y + 110) < coord.y ) || ((coord2.y > (coord.y + 220)))) || (coord2.x > (coord.x + 220))))
                    {
                        coord2.x--;
                    }
                break;
                case SDL_QUIT:
                continuer = 0;
                break;
            }
            SDL_BlitSurface(Surface2, NULL, ecran, &coord2);
            SDL_BlitSurface(Surface1, NULL, ecran, &coord);
            SDL_Flip(ecran);
        }
        SDL_FreeSurface(Surface1);
        SDL_FreeSurface(Surface2);
        SDL_Quit();
        return EXIT_SUCCESS;
    }
     
     
     
    SDL_Surface *Init()
    {
        SDL_Surface *ecran = NULL;
        if (SDL_Init(SDL_INIT_VIDEO) == -1)
        {
            fprintf(stderr, "Erreur d'initialisation de la SDL");
            exit(EXIT_FAILURE);
        }
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        if (ecran == NULL)
        {
            fprintf(stderr, "Impossible de charger le mode vidéo : %d\n",! SDL_GetError());
            exit(EXIT_FAILURE);
        }
        return ecran;
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 865
    Points : 219 078
    Points
    219 078
    Billets dans le blog
    121
    Par défaut
    Bonjour,

    Citation Envoyé par Voldemort09 Voir le message
    Il y a aussi un deuxième problème, la surface mobile laisse une "trace" la ou elle passe.
    Il manque l'effacement de l'écran alors

    Pour l'autre problème, c'est un problème dans les tests (au milieu des évènements) Je vous conseille l'utilisation d'un debuggueur pour voir rapidement le problème (et des breakpoints)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Oui ,+1 il manque la rafraîchissement de ton fond dans la boucle while continuer.

    Ensuite sans regarder le problème de collisions , tu pourrais rendre ton code un peu plus clair en utilisant un switch pour la gestions des touches.

    Ensuite la meilleure solution que je peux te donner c'est un papier un crayon x).

Discussions similaires

  1. Problème simple avec mprojector
    Par ptiteteteu dans le forum Flash
    Réponses: 1
    Dernier message: 23/06/2010, 19h44
  2. problème simple avec des "if"
    Par johnburton54 dans le forum VBA Access
    Réponses: 11
    Dernier message: 07/06/2007, 10h24
  3. Problème avec la sdl sur devc++
    Par cuicuicui dans le forum SDL
    Réponses: 3
    Dernier message: 07/08/2006, 13h04
  4. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 00h26
  5. probléme avec la sdl et c++
    Par wikers dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/11/2004, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo