Virtual FMAN forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Virtual FMAN forum

Virtual FMAN forum
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -11%
SAMSUNG 55Q70C – TV QLED 55″ (138 cm) 4K ...
Voir le deal
549.99 €

 

 Problème d'affichage avec SDL

Aller en bas 
4 participants
AuteurMessage
Ka
Invité




Problème d'affichage avec SDL Empty
MessageSujet: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyJeu 16 Mar à 9:33

Salut, voici un programme en C++ avec la llibrairie SDL, écrit sous Dev C++ 4. Le but est d'afficher un wallpaper, 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). 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 :

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 ! Et merci FVIRTMAN pour ce tuto génial ! affraid affraid[/code]
Revenir en haut Aller en bas
KaptN




Nombre de messages : 3
Date d'inscription : 16/03/2006

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyJeu 16 Mar à 9:34

Oups, j'avais oublié de m'indentifier. Rolling Eyes
Revenir en haut Aller en bas
le_duche

le_duche


Nombre de messages : 60
Age : 39
Localisation : Bruxelles
Date d'inscription : 07/12/2005

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyJeu 16 Mar à 11:17

Evidemment !
Tu ne blit pas Monstre sur screen...

Mais tu fais une autre affreuse erreur (qui ne pose pas de problème d'execution mais ca va lagger à mort !

Charge ton fichier Monstre en DEHORS de ta boucle, sinon il doit chaque fois ouvrir, charger toutes les données,...
Revenir en haut Aller en bas
FVIRTMAN
Admin
FVIRTMAN


Nombre de messages : 78
Date d'inscription : 11/11/2005

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyMer 22 Mar à 4:09

ah oui, ne jamais faire de load dans la boucle principale...
Revenir en haut Aller en bas
http://perso.numericable.fr/fvirtman
KaptN




Nombre de messages : 3
Date d'inscription : 16/03/2006

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyMer 22 Mar à 14:04

Merci pour vos réponses, mais je ne comprend ce que tu veux dire, le_duche... Avec ma fonction CreateSurface, je blitte sur screen, et dans ma boucle du main, je fais Flip_screen...
Quant au chargement de l'image Monstre dans la boucle, je ne vois pas comment faire autrement, car le but est de faire se déplacer le monstre, donc augmenter ou diminuer l'abscisse de l'image, et de l'afficher dans sa nouvelle abscisse (d'ailleurs je pense qu'il devrait y avoir des trainées, car l'image est remise par dessus l'ancienne, comme dans le tuto avec l'image avec la fusée).
Revenir en haut Aller en bas
countag




Nombre de messages : 57
Date d'inscription : 10/02/2006

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyMer 22 Mar à 23:30

il y aura une traine si tu ne vide pas ton ecran ( SDL_FillRect() ) car tu dois effacer ton ecran et afficher la frame suivant sinon oui car l ecran carte en memoire l affichage actuel donc si tu bouge ton monstre il y aura une trainer pour cela tu fais :

SDL_FillRect(SDL_GetVideoSurface(),NULL,0);
Revenir en haut Aller en bas
le_duche

le_duche


Nombre de messages : 60
Age : 39
Localisation : Bruxelles
Date d'inscription : 07/12/2005

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyJeu 23 Mar à 15:16

Je corrigerai ton code demain dans la journée.
Revenir en haut Aller en bas
KaptN




Nombre de messages : 3
Date d'inscription : 16/03/2006

Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL EmptyVen 24 Mar à 13:15

le_duche a écrit:
Je corrigerai ton code demain dans la journée.

Merci beaucoup flower
Revenir en haut Aller en bas
Contenu sponsorisé





Problème d'affichage avec SDL Empty
MessageSujet: Re: Problème d'affichage avec SDL   Problème d'affichage avec SDL Empty

Revenir en haut Aller en bas
 
Problème d'affichage avec SDL
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Petit probleme de logiciel
» composition d'une map avec la SDL
» Controle du pointeur avec la souris
» Afficher une variable avec printSDL

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Virtual FMAN forum :: Tutorial C++ :: SDL-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser