C/sdl - mouvement basique pour débutant

Soyez le premier à donner votre avis sur cette source.

Vue 8 367 fois - Téléchargée 620 fois

Description

Bonjour à tous,

Voici donc le code source d'un programme tout simple. Celui-ci fait avancer de gauche à droite puis de droite à gauche une vache sur de l'herbe. Ici le but et d'offrir un code très basique utilisant la SDL pour toute personne voulant débuter en SDL.

Avec ce code, vous devriez être capable d'afficher des images sur une fenêtre, gérer la transparence d'une image, et de créer un mouvement simple.

Source / Exemple :


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

/**********************************************************
                     FONCTION MAIN

                                                                                                                    • /
int main(int argc, char *argv[]) { //Création des variables SDL_Surface *fond = NULL, *pelouse = NULL, *vache = NULL; SDL_Rect positionPelouse, positionVache; int continuer = 1, droite = 1; SDL_Event event; //Initialisation de la SDL SDL_Init(SDL_INIT_VIDEO); //Création de nos surface fond = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE); pelouse = SDL_LoadBMP("pelouse.bmp"); vache = SDL_LoadBMP("vache.bmp"); //On gère la transparence sur la vache SDL_SetColorKey(vache, SDL_SRCCOLORKEY,SDL_MapRGB(vache->format,0,0,255)); //Changement du titre de la fenêtre SDL_WM_SetCaption("Test sur les mouvements en C",NULL); //On colore notre fond SDL_FillRect(fond,NULL,SDL_MapRGB(fond->format,255,0,0)); //On donne une position à notre pelouse positionPelouse.x = 0; positionPelouse.y = 0; positionVache.x = 320; positionVache.y = 240; //On blit la pelouse et la vache SDL_BlitSurface(pelouse,NULL,fond,&positionPelouse); SDL_BlitSurface(vache,NULL,fond,&positionVache); //Boucle pour faire avancer la vache (tant qu'on n'a pas quitter le programme, la boucle ne s'arrête pas) while(continuer) { SDL_PollEvent(&event); switch (event.type) { case SDL_QUIT : continuer = 0; break; } if (positionVache.x > 590) droite = 0; if (positionVache.x <= 0) droite = 1; //On change la vache de position if (droite) positionVache.x++; else positionVache.x--; SDL_Delay(10); //On met en pause 10ms //on efface l'écran et réaffichons tout SDL_FillRect(fond,NULL,SDL_MapRGB(fond->format,255,255,255)); SDL_BlitSurface(pelouse,NULL,fond,&positionPelouse); SDL_BlitSurface(vache,NULL,fond,&positionVache); //On met à jour l'écran SDL_Flip(fond); } //On ferme la SDL et les surfaces: SDL_FreeSurface(pelouse); SDL_FreeSurface(vache); SDL_Quit(); return EXIT_SUCCESS; }

Conclusion :


Codez, mais codez propre

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Sc59300 Messages postés 1 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 avril 2010
3 avril 2010 à 21:56
Moi je ne comprend pas pourquoi tu as mis : SDL_PollEvent
Alors que c'est une petite application et tu aura ton proc qui risque de saturer :s

Bien entendu se n'est que mon avis (je débute depuis cet aprem)
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
28 sept. 2009 à 11:17
Ca a l'air sympa, mais je ne vois pas ou tu prends en compte la VBL...
Le double buffer limite les artefacts de refresh, mais si beaucoup de chose bougent, ou si les mouvements sont rapides, ca va se voir.

Eric

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.