[sdl] exemple de gestion des events

Description

Salut,

Cette source est un exemple de gestion des évènements.
Il est possible de déplacer 2 images, la n°1 et la n°2, et de changer l'image controlée grace à la touche ECHAP. (bien entendu les images se déplacent avec les touches directionelles)
La barre de titre change aussi en fonction de l'image controlée.

Notes l'absence de gestion de touche enfoncée (il faut réappuyer sur la touche de déplacement pour redéplacer), et l'absence d'utilisation des COLORKEYS.

Source / Exemple :


#include <SDL.h>
#include <stdlib.h>

SDL_Surface *Screen, *Rect, *Rect2;
SDL_Rect Rectangle, Rectangle2;
SDL_Event Event;
int Done = 0;
int whatplayer = 1;

void Display() {
    SDL_FillRect(Screen, 0, 0);
    SDL_BlitSurface(Rect, 0, Screen, &Rectangle);
    SDL_BlitSurface(Rect2, 0, Screen, &Rectangle2);
    SDL_Flip(Screen);
}

int main(int argc, char *argv[]) {
    if(SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf(stderr, "ERROR ! %s\n", SDL_GetError());
        return 5;
    }
    Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Control : n°1", 0);
    if(Screen == 0) {
        printf(stderr, "ERROR ! %s\n", SDL_GetError());
        return 10;
    }
    Rectangle.x = 50;
    Rect = SDL_LoadBMP("hit1.bmp");
    Rect2 = SDL_LoadBMP("hit2.bmp");
    while(Done != 1) {
        while(SDL_PollEvent(&Event)) {
                switch(Event.type) {
                                case SDL_QUIT : Done = 1;
                                case SDL_KEYDOWN : switch(Event.key.keysym.sym) {
                                                                
                                                                case SDLK_LEFT : 
                                                                if(whatplayer == 1 ) {
                                                                Rectangle.x = Rectangle.x - 20;
                                                                } else if(whatplayer == 2) {
                                                                Rectangle2.x = Rectangle2.x - 20;
                                                                } break;
                                                                
                                                                case SDLK_RIGHT :
                                                                if(whatplayer == 1 ) {
                                                                Rectangle.x = Rectangle.x + 20;
                                                                } else if(whatplayer == 2) {
                                                                Rectangle2.x = Rectangle2.x + 20;
                                                                } break;
                                                                
                                                                case SDLK_UP : 
                                                                if(whatplayer == 1 ) {
                                                                Rectangle.y = Rectangle.y - 20;
                                                                } else if(whatplayer == 2) {
                                                                Rectangle2.y = Rectangle2.y - 20;
                                                                } break;
                                                                
                                                                case SDLK_DOWN :
                                                                if(whatplayer == 1 ) {
                                                                Rectangle.y = Rectangle.y + 20;
                                                                } else if(whatplayer == 2) {
                                                                Rectangle2.y = Rectangle2.y + 20;
                                                                } break;
                                                                
                                                                case SDLK_ESCAPE :
                                                                if(whatplayer == 1) { whatplayer = 2; SDL_WM_SetCaption("Control : n°2", 0); } 
                                                                else if(whatplayer == 2) {
                                                                whatplayer = 1; SDL_WM_SetCaption("Control : n°1", 0);
                                                                } break;
                                                   }
        }
    }
    Display();
    }
    return 0;
}

Conclusion :


Bon ben je suis moi-même en phase d'apprentissage de SDL alors...

;)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.