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

SFML Discussion :

animation d'une image


Sujet :

SFML

  1. #1
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut animation d'une image
    Bonjour,

    je réalise un petit projet perso (un jeu de carte).
    Plutôt que de jouer avec des images statiques pour les cartes/mains des joueurs, je voulais apprendre à implémenter des bibliothèques.

    J'ai intégré SFML et fait quelques tests.

    pour le son, pas de soucis c'est facile et je peux faire tout ce dont j'ai besoin
    pour le graphique par contre c'est plus dur.

    j'arrive à intégrer une fenêtre SFML dans un panel de mon windows form, y afficher une image, dessiner des choses, ...

    Mais ici mon besoin est de pouvoir afficher pleins d'images, et d'en faire bouger (les cartes qui se jouent au centre)
    Je n'arrive pas à en faire bouger:
    lorsque je pars sur des boucles de déplacements toute mon application se fige.

    Quels principes dois-je utiliser?
    Avez-vous un exemple de boucle qui réalise cela?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Une méthode possible, est d'avoir une boucle du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (game)
    {
       affiche()
       met_a_jour()
    }
    Le principe est de faire le déplacement des cartes dans met_a_jour, mais pixel à pixel (ou plus pour aller plus vite). De plus, il faut garder une sorte de structure, pour connaître la destination de l'animation (pour un déplacement).

    Ce qui permet d'éviter le gel de l'application ou des autres animations, c'est que l'on va parcourir une liste des éléments à mettre à jour, dans la fonction met_a_jour(). Ainsi, on pourra en mettre à jour plusieurs, tout en gardant un affichage constant (et une animation constante).
    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.

  3. #3
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut
    en fait, ce genre de boucle j'en ai vu plusieurs sur ce forum ou ailleurs, c'est la boucle classique.
    mais le problème est qu'alors on reste coincé das le while.

    moi j'ai une windows form qui fait plein d'autres choses.
    avec ce genre de boucle ça ne va pas.

    quand je fais ceci (dans un panel de ma form), pour tester ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    app = new RenderWindow(panel_SFML.Handle);
                app.SetFramerateLimit(60);
    mytexture = new SFML.Graphics.Texture(myimage);
                mysprite = new Sprite(mytexture);
    app.Clear();
                mysprite.Position = new SFML.Window.Vector2f(mysprite.Position.X + 10, 0);
                app.Draw(mysprite);
     
                app.Display();
    mais bon, c'est un affichage unique ça ne va pas.
    je suis parti sur un timer mais il y a quelque chose qui m'échappe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    app = new RenderWindow(panel_SFML.Handle);
                app.SetFramerateLimit(60);
    mytexture = new SFML.Graphics.Texture(myimage);
                mysprite = new Sprite(mytexture);
                System.Timers.Timer mytimer = new System.Timers.Timer();
                mytimer.Elapsed += new ElapsedEventHandler(RunEvent);
                mytimer.Interval = 500;
                mytimer.Start();
    a chaque intervalle de timer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     app.Clear();
                mysprite.Position = new SFML.Window.Vector2f(mysprite.Position.X + 10, 0);
     
                app.Draw(mysprite);
     
                app.Display();
    mais rien ne s'affiche.
    je passe pourtant bien dans ma fonction de timer toutes les demi secondes et je vois bien la valeur de la position qui évolue en debug.
    qu'est ce que je fais de mal?

  4. #4
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Points : 1 119
    Points
    1 119
    Par défaut
    il s'agit d'un conflit inter-thread masqué par SFML.

    Après avoir testé avec des contrôles classiques, j'ai eu un message d'erreur.

    Après être passé par des delegates, ça fonctionne!

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

Discussions similaires

  1. [JS] Peut on connaitre le temps d'animation d'une image au format gif ?
    Par minimolo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/12/2006, 10h44
  2. Animation d'une image, translation, rotation en javascript ?
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/09/2006, 11h21
  3. animation d'une image
    Par robocop2776 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/01/2006, 09h17
  4. Animation d'une image / CSS
    Par Trunks dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/12/2005, 15h58
  5. Réponses: 2
    Dernier message: 26/07/2005, 21h44

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