IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Problème affichage image SDL


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème affichage image SDL
    Bonjour, j'ai un petit soucis (sûrement d'architecture de mon code) : je souhaiterais afficher une image environ 2sec sans pour autant bloquer le reste du programme (donc le SDL_Delay on oublie).

    Là où j'en suis :
    j'ai utilisé le SDL_GetTicks () accompagné d'une petite soustraction afin de vérifier à chaque passage dans ma boucle (qui englobe tout le programme) : si 2 secondes se sont écoulées, ça affiche l'image, sinon ça passe le if.

    Le problème : A la fin de ma boucle "j'efface l'écran" (je le re-blit pour effacer tout ce que je ne veux pas), or cela efface aussi l'image que je veux laisser. Cependant, vu que la condition est vérifiée pendant deux secondes, l'image se ré-affiche (donc ce que je voulais à la base, je l'ai )
    Là où ça cloche c'est que l'image scintille (vu que je l'affiche, je l'efface, je l'affiche, je l'efface et ainsi de suite)

    Quelqu'un aurait-il une solution pour éviter ce scintillement ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Vous avez essayé de ne pas rafraîchir l'écran après avoir effacé mais seulement à la fin ? Autrement dit, vous effacez tout, vous reblittez tout ce que vous voulez, dont votre fameuse image, et enfin seulement vous rafraichissez ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    C'est ce que j'ai fais, je peux envoyer le code source si vous voulez mais en gros ça fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (!SDLK_SPACE)
    {
         //on affiche les images, on gère les déplacements et tout le tralala
         if (tempsPassé < 5000 (ms) )
              afficher imageVoulue;
     
    Afficher "écran"    //surface principale donc on efface tout
    Afficher images    // les images qui restent tout le temps
    }
    Si ce n'est pas compréhensible je peux envoyer le code source, mais je suis encore débutant, donc pas super bien organisé

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Oui, n'hésitez pas à envoyer le code et on vous fera même des remarques pour qu'il soit mieux organisé, si vous le souhaitez.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voilà le code source (je ne met que ce qui est nécessaire pour quoi ce soit lisible)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #define TEMPS_TIR 1000
    #define HAUTEUR_ECRAN 480
    #define LARGEUR_ECRAN 640
     
    int main(int argc, char *argv[])
    {
    // initialisation des variables
    // chargement des autres surfaces dont la surface *Joueur
     
    tir = SDL_CreateRGBSurface (SDL_HWSURFACE,200, 20, 32, 0, 0, 0, 0);
     SDL_FillRect (tir, NULL, SDL_MapRGB(ecran->format, 120, 120, 120));
     
    posTir.x = posJoueur.x + Joueur->w;
    posTir.y = posJoueur.y + Joueur->h/8;
     
    while(!in.key[SDLK_ESCAPE]) //tant que toucheEnfoncée != echap
    {
    tempsActuel = SDL_GetTicks ();
    		if(in.key[SDLK_SPACE])
    			tempsInitial = tempsActuel;
     
    		if (tempsActuel - tempsInitial < TEMPS_TIR)
    		{SDL_BlitSurface (tir, NULL, ecran, &posTir);SDL_Flip(ecran);}
     
     
     
    	 SDL_FillRect (ecran, NULL, SDL_MapRGB(ecran->format, 20, 50, 120));
    	 SDL_BlitSurface (carre, NULL, ecran, &posCarre);
    	 SDL_BlitSurface (Joueur, NULL, ecran, &posJoueur);
    	 SDL_Flip(ecran);// affichage de tout le bordel
     
    	}


    sinon voici le lien du code entier http://fr.textsave.org/ofO même principe mais un peu moins lisible

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Veuillez faire attention à l'indentation, une mauvaise indentation gêne à la lecture du code.

    Ce que je ferai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    effacement de l'écran en entier
    affichage des sprites (ceux qui reste tout le temps)
    affichage du sprite qui doit disparaitre
    flip de l'écran
    Ce qui, je pense, donne avec votre code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    while(!in.key[SDLK_ESCAPE]) //tant que toucheEnfoncée != echap
    {
        SDL_FillRect (ecran, NULL, SDL_MapRGB(ecran->format, 20, 50, 120));
     
        tempsActuel = SDL_GetTicks ();
        if(in.key[SDLK_SPACE])
            tempsInitial = tempsActuel;
     
        if (tempsActuel - tempsInitial < TEMPS_TIR)
        {
            SDL_BlitSurface (tir, NULL, ecran, &posTir);
        }
        SDL_BlitSurface (carre, NULL, ecran, &posCarre);
        SDL_BlitSurface (Joueur, NULL, ecran, &posJoueur);
        SDL_Flip(ecran);// affichage de tout le bordel
    }
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Désolé de la réponse tardive mais au moment d'essayer le code, je compile et, que vois-je ? mon compilateur qui se met à me pondre des erreurs à tout va (plus d'une centaine d'après VC++ express qui s'est arrété de compiler au bout de 100 erreurs)
    Ce n'est que des erreurs en rapport avec la SDL, or je n'ai rien touché dans les paramètres de mon projet, et j'ai tout revérifé, aurais-je oublié quelque chose ?

    EDIT : j'avais juste mal placé le SDL_Init (je l'avais placé avant la déclaration des variables, je ne vois pas en quoi ça peut être mal mais bon ...)
    J'ai essayé le code et ça marche impec, merci beaucoup (par contre je ne comprend pas pourquoi ça marche mieux dans cet ordre, décidement l'indentation me pose toujours des problèmes )

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Le SDL_FillRect efface le rectangle que vous vouliez, je pense. Le premier SDL_Flip() permettait d'afficher le rectangle à l'écran, mais comme il était effacer tout de suite après, ça scintillait.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème affichage Images
    Par jason69 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/03/2007, 20h19
  2. [MySQL] problème affichage image avec sql
    Par igaurillac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/02/2007, 18h04
  3. [VB]Problème affichage image dans IE6
    Par flogreg dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 18h41
  4. Problème affichage image dans IE6
    Par flogreg dans le forum IE
    Réponses: 6
    Dernier message: 13/02/2006, 14h29
  5. problème affichage image
    Par thealpacino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/05/2005, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo