Kaptain Posté(e) le 13 mars 2006 Partager Posté(e) le 13 mars 2006 Salut, voici un programme en C++ avec la llibrairie SDL, écrit sous Dev C++ 4. Le but est d'afficher un wallapaper, et par-dessus, un monstre qui bouge horizontalement. Et ensuite, j'incluerai une arme fixe, que l'on contrôle, et quand le monstre est en face, on tire, et on gagne. Mais le problème, c'est que bien que le code se compile sans erreurs, je n'ai pas d'affichage lorsque j'exécute le code (écran noir dans la fenêtre du programme). Etant donné que la librairie SDL est incluse, ça complique la tâche, mais je vais vous expliquer pourquoi je ne trouve pas la source du problème : - la ligne "Further object files or linker options" dans Project Options est bien remplie par "-lmingw32 -lSDLmain -lSDL". - le fichier SDL.dll est inclus dans le dossier de l'éxecutable. - j'exécute le programme de façon manuelle, en lançant le fichier exécutable, et non en exécutant à partir du compilateur, ce qui ne marche pas sous SDL. - mes fichiers "wallpaper.bmp" et "monstre_1.bmp" sont bien présent dans le dossier de l'exécutable, et en 24 bits de profondeur d'image (au début, j'avais mis un affichage 32 bits dans le programme, et j'ai mis 24 en pensant que le problème venait de là). Voici le code : #include <sdl/sdl.h> #include <iostream.h> #pragma comment(lib,"sdl.lib") #pragma comment(lib,"sdlmain.lib") char KeyButton [400]; char MouButton [3] = {0,0,0}; SDL_Surface* Screen; SDL_Surface* Wallpaper; SDL_Surface* Monstre; SDL_Rect CreateRect (int x , int y , int w , int h) //création d'un rectangle par une fonction (plus rapide) { SDL_Rect a; a.x = x; a.y = y; a.w = w; a.h = h; return a; } SDL_Surface* CreateSurface (char* Fichier, int Abscisse, int Ordonnee, int Vram) //fonction d'affichage d'images en VRAM ou RAM { SDL_Surface* SurfRam = SDL_LoadBMP (Fichier); SDL_Surface* SurfVram = NULL; if (Vram) SurfVram = SDL_CreateRGBSurface (SDL_HWSURFACE, SurfRam -> w, SurfRam -> h, 24, 0, 0, 0, 0); if (SurfVram == NULL) Vram = 0; if (!Vram) SurfVram = SDL_CreateRGBSurface (SDL_HWSURFACE, SurfRam -> w, SurfRam -> h, 24, 0, 0, 0, 0); SDL_Rect Position = CreateRect (Abscisse, Ordonnee, 0, 0); SDL_BlitSurface (SurfRam, NULL, SurfVram, &Position); SDL_FreeSurface (SurfRam); return SurfVram; } void MajEvenement () //fonction de MAJ d'événements { SDL_Event evenement; while (SDL_PollEvent (&evenement)) { switch (evenement.type) { case SDL_KEYDOWN : KeyButton [evenement.key.keysym.sym]=1; break; case SDL_KEYUP : KeyButton [evenement.key.keysym.sym]=0; break; case SDL_MOUSEBUTTONDOWN : MouButton [evenement.button.button]=1; break; case SDL_MOUSEBUTTONUP : MouButton [evenement.button.button]=0; break; } } } int SensDeplacement (int Position, int PositionMin, int PositionMax) /*détermine à quel moment il faut aller de gauche à droite ou de droite à gauche : quand on est près d'un bord de l'écran, on change le signe pour changer le sens de déplacement*/ { int SensDeplacement; if (Position<PositionMin) SensDeplacement = 1; if (Position>PositionMax) SensDeplacement = -1; return SensDeplacement; } int main(int argc,char** argv) { int AbscisseMonstre = 0; int SensDeplacementMonstre = 0; SDL_Init (SDL_INIT_VIDEO); SDL_ShowCursor (0); Screen = SDL_SetVideoMode (1280,960,24,SDL_HWSURFACE|SDL_DOUBLEBUF); Wallpaper = CreateSurface ("wallpaper.bmp", 0, 0, 1); //affichage du wallpaper while (1) { MajEvenement (); if (KeyButton [SDLK_RETURN]) //sortie de la boucle si touche Entrée pressée break; SensDeplacementMonstre = SensDeplacement (AbscisseMonstre, 12, 756); /*définition du sens avec les valeurs (les bords) dans lesquelles on change de sens*/ AbscisseMonstre = AbscisseMonstre + (2*SensDeplacementMonstre); //vitesse de déplacement influencée par le sens: ici : 2 pixels Monstre = CreateSurface ("monstre_1.bmp", AbscisseMonstre, 64, 1); //affichage en VRAM avec l'abscisse et l'ordonnée SDL_Flip (Screen); } return 0; } Merci de votre aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kaptain Posté(e) le 15 mars 2006 Auteur Partager Posté(e) le 15 mars 2006 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.