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

 Java Discussion :

Animer un personnage


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut Animer un personnage
    Bonjour à tous,

    Dans le cadre d'un projet, je dois réaliser un jeu 2D. J'ai donc choisi de faire une remake de street fighter ou autre basé sur des personnages de Manga "récent".

    Mon problème est le suivant : j'ai un fond (map) fixe, et je voudrais savoir comment animer mon personnage ?

    J'ai une image de base qui contient la décomposition du mouvement souhaité mais je ne saisis pas comment faire pour l'animer ?

    merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah tu te mets en place un timer et tu fais en sorte que toutes les x secondes l'écran se raffraichi, en parallèle tu change l'image de ton perso tous les X secondes (là il faut plutôt compter le temps passé afin d'avoir une animation fluide, tu peux parfaitement imaginer un timer qui se déclenche trois fois mais un changement d'image qui ne s'exécute qu'une fois).

    Un outil auquel tu devrais t'intéresser est le timingframework qui offre des fonctionnalités avancés pour gérer ce genre de problèmatiques.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Par défaut
    Je pense comprendre le principe de se que tu me dis. Mais par sécurité, aurais-tu un bout de code pour exemple ?

    Par contre, il y a toujours un coin sombre dans ma tête. Mon image contenant la décomposition de mon mouvement fait 1000 x 500 par exemple :
    ---> etat1 : x = 0, y = 0, L = 200, H = 500
    ---> etat2 : x = 200, y = 0, L = 200, H = 500
    ---> etat3 : x = 400, y = 0, L = 200, H = 500
    ---> etat4 : x = 600, y = 0, L = 200, H = 500
    ---> etat5 : x = 800, y = 0, L = 200, H = 500

    Je ne comprend pas comment afficher seulement une partie de l'image par exemple etat3, et surtout comment savoir ou est ce que je suis dans mon image ?

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La méthode drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)de la classe Graphics qui te permet de dessiner une partie d'une image à un emplacement précis d'un contexte graphique.
    Par contre à toi de savoir te repérer dans ton image, il y a surement des enchainements logiques, et chaque image à en général une taille fixe dans ce genre de planches. Donc tu te fais une boucle sur toutes les sous-images qui composent ton animation et le tour est joué (grace à la taille fixe des sous images tu dois pouvoir te repérer).

  5. #5
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    pour connaitre ta frame courante il faut que tu passes le temps écoulé à chaque cycle dans ta boucle principale.
    Pour ce qui est de la structure tu peux te créer une classe FramesSequence contenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string name;
    int framesWidth, framesHeight;
    int currentIndex;
    int[] framesIndex;
    Ensuite tu stockes une liste de FramesSequence et une FrameSequence courante dans ta classe Sprite. Tu définis ensuite une fonction nextFrame(int elapsedTime) que t'appelles à chaque cycle pour tous les sprites animés et qui te permet de modifier le currentIndex de ta FramesSequence en fonction tu temps écoulé.
    Ca c'est au cas où tu ne stocke pas ton image à l'intérieur de ta FramesSequence mais à l'extérieur, plus optimisé car tu peux partager tes images. Pour un SFII tu peux peut-être stocker ton image à l'intérieur ça change un peu l'approche. Ensuite tu te retrouves avec un code du style dans ton main loop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sprite.getCurrentFramesSequence().nextFrame(elapsedTime);
     
    graph.drawImage(sprite.getCurrentFramesSequence().getImage(),
    sprite.getX(), sprite.getY(),
    sprite.getX() + sprite.getWidth(), sprite.getY() + sprite.getHeight(),
    sprite.getCurrentFramesSequence().getCurrentFrame().getX(), 
    sprite.getCurrentFramesSequence().getCurrentFrame().getY(), 
    sprite.getCurrentFramesSequence().getCurrentFrame().getX()
     + sprite.getCurrentFramesSequence().getFramesWidth(), 
    sprite.getCurrentFramesSequence().getCurrentFrame().getY()
     + sprite.getCurrentFramesSequence().getFramesHeight(),
    observer);
    Je connais pas la méthode drawImage mais ça doit donner un truc comme ça.
    Ce code est un exemple de base, personnellement j'utilise également une classe Frame, ça permet simplifie l'utilisation de frames de tailles différentes.
    Et dans ton listener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(flecheGauche) {
    sprite.setCurrentFramesSequence("move_left");
    }
    else if(flecheDroite) {
    sprite.setCurrentFramesSequence("move_right");
    }
    else {
    sprite.setCurrentFramesSequence("idle");
    }

Discussions similaires

  1. Animation de personnages Java3D
    Par husobom dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 27/04/2009, 16h11
  2. Animer un personnage 2D en OpenGL
    Par Nicolas123 dans le forum OpenGL
    Réponses: 1
    Dernier message: 24/03/2009, 22h27
  3. Question sur l'animation de personnages 3D
    Par cuchu dans le forum Moteurs 3D
    Réponses: 4
    Dernier message: 21/09/2007, 12h39
  4. Animation de personnages
    Par NiamorH dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 09/09/2007, 19h29
  5. Animer des personnages 3D
    Par mat.M dans le forum DirectX
    Réponses: 6
    Dernier message: 16/06/2004, 11h28

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