[sdl] exemple de gestion des events

Soyez le premier à donner votre avis sur cette source.

Vue 4 755 fois - Téléchargée 383 fois

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

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
10 avril 2005

bein moi je met 9/10 parce ke je connet vraiment pa la lib sdl et ke ca fa ke un moin ke je prog en c et ke g un projet a faire pour dans un moi qui doit etre un jeu qui utilise la sdl et ke ce code me donne deja des bases tres claires !
Messages postés
120
Date d'inscription
mercredi 7 mai 2003
Statut
Membre
Dernière intervention
14 janvier 2006

ben,je veux bien,mais cela sert a quoi alors? :)
Messages postés
33
Date d'inscription
dimanche 16 mai 2004
Statut
Membre
Dernière intervention
24 mars 2005

nan c'est juste que j'aime pas le exit()
Messages postés
33
Date d'inscription
dimanche 16 mai 2004
Statut
Membre
Dernière intervention
24 mars 2005

nan c'est juste que j'aime pas le exit()
Messages postés
120
Date d'inscription
mercredi 7 mai 2003
Statut
Membre
Dernière intervention
14 janvier 2006

les return 5 et return 10 ont une fonction particulère?

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.