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 :

Animation et background


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut Animation et background
    Bonjour à tous,

    J'ai un petit problème.

    J'ai créé un personnage qui bouge avec les flèches, attaque, saute etc.....
    Une attaque correspond à une séquence d'images lorsque j'appuie sur Espace.
    Il y a également un décors en fond.

    Le pb est que lorsque la séquence est lancée le décors disparaît brièvement.

    Le code est composé de la manière suivante :

    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
    33
     
    //Extrait du main
    while(1)
    {
             SDL_FillRect(screen, NULL , SDL_MapRGB(screen->format, 0, 0, 0));
     
             //Affichage du décors
             niveau->niveau1();
     
             //Affichage du Hero
             (hero->getGraph())->dessinerSprite(x,y,width,height);
     
             //Action du Hero
             hero->agir();
     
             SDL_Flip(screen);
    }
     
    agir() appelle la procédure attaquer()
     
    void Hero::attaquer()
    {
    .........
            //Boucle permettant l'enchainement des images de l'animation
            while (action==false)
            {
                 SDL_Delay(50);
                 SDL_Flip(screen);
                 SDL_FillRect(screen, NULL , SDL_MapRGB(screen->format, 0, 0, 0));
                 .........
            }
    ......
    }
    J'ai bien compris pourquoi ca marche pas mais je ne vois pas comment gérer cela. Des threads ?
    SI vous avez un ptite idée elle serait la bienvenue merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    J'ai déjà lu la FAQ concernant le SDL_Flip. J'ai bien vu qu'il n'en faut qu'un. Mais dans la boucle de l'animation des images lorsque je l'enlève on ne voit plus l'animation ...

  4. #4
    Membre éprouvé Avatar de Polyfructol
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2007
    Messages : 131
    Par défaut
    Salut !

    Tu dois bien faire un seul SDL_Flip() comme tu l'as vu, je ne comprends pas pourquoi aussi tu fais des SDL_FillRect à plusieurs endroits.

    Si tu suis l'ordre logique d'affichage ça fait :
    1. "SDL_FillRect(screen, NULL , SDL_MapRGB(screen->format, 0, 0, 0));" : et encore ça n'est pas utile si ton background prend toute la taille de l'écran
    2. Blit du background sur l'écran
    3. Blit du hero sur l'écran
    4. "SDL_Flip();" pour mettre à jour l'écran

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Citation Envoyé par Polyfructol
    Salut !

    Tu dois bien faire un seul SDL_Flip() comme tu l'as vu, je ne comprends pas pourquoi aussi tu fais des SDL_FillRect à plusieurs endroits.

    Si tu suis l'ordre logique d'affichage ça fait :
    1. "SDL_FillRect(screen, NULL , SDL_MapRGB(screen->format, 0, 0, 0));" : et encore ça n'est pas utile si ton background prend toute la taille de l'écran
    2. Blit du background sur l'écran
    3. Blit du hero sur l'écran
    4. "SDL_Flip();" pour mettre à jour l'écran
    Au début j'ai codé les animations et mouvements sans décors donc avec un fond noir. Dans ma logique j'effaçais l'écran, je blittais au fur et à mesure les images et je mettais à jour l'écran. D'où le double FillRect et Flip.
    C'est lorque j'ai ajouté un fond que tout à basculé

    Le double Flip cause la disparition de mon décors car l'animation est composée de 6 images. Lorsque j'enlève le FillRect et le FLip de l'animation, j'ai maintenant une animation dont les images de superpose et dont les images s'enchainent en une fraction de seconde.

  6. #6
    Membre éprouvé Avatar de Polyfructol
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2007
    Messages : 131
    Par défaut
    Ah j'avais pas vu une chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Boucle permettant l'enchainement des images de l'animation
            while (action==false)
            {
                 SDL_Delay(50);
                 SDL_Flip(screen);
                 SDL_FillRect(screen, NULL , SDL_MapRGB(screen->format, 0, 0, 0));
                 .........
            }
    C'est là qu'il y a un problème, une animation ne déroule pas comme ça. Là tu bloques ton programme dans une seconde boucle de rendu... C'est très bizarre .

    En gros, ce que tu dois faire c'est en d'abord tu blittes le background, puis tu avances d'une animation ton héro, puis tu blittes ton héro, puis tu affiches.

    Tu dois supprimer cette boucle while.

    Si tu comprends pas, poste un peu plus de code.

Discussions similaires

  1. animation de background position
    Par SpaceFrog dans le forum jQuery
    Réponses: 0
    Dernier message: 08/08/2012, 09h04
  2. Animation flash background
    Par gaucho dans le forum Flash
    Réponses: 0
    Dernier message: 16/12/2011, 15h20
  3. FadeIn ou animate de background-image avec <body>
    Par Eonalias dans le forum jQuery
    Réponses: 3
    Dernier message: 14/07/2010, 02h35
  4. problème décalage entre animation et background animation
    Par nattydreadnatty dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 26/04/2010, 09h17
  5. Probleme animation Textblock background
    Par bnogent dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 16/07/2009, 12h05

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