C/sdl - mouvement basique pour débutant

Soyez le premier à donner votre avis sur cette source.

Vue 8 151 fois - Téléchargée 601 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
Messages postés
1
Date d'inscription
samedi 3 avril 2010
Statut
Membre
Dernière intervention
3 avril 2010

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)
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

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.