Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Problème d'animation de mon personnage  (Lu 5625 fois)

0 Membres et 1 Invité sur ce sujet

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Problème d'animation de mon personnage
« le: Août 25, 2016, 03:15:55 pm »
Bonjour,
J'essaye de faire que mon personnage met un coup de dag quand j'appui sur espace sauf que ça fait du frame par frame donc je doit appuyer plusieur fois pour que l'annimation se fase et j'aimerais que quand j'appui une fois sur espace ça me fait l'anim entièrement

voila un exemple de mon code


        sf::Vector2i animAttack(1, Down);
        sf::Clock clock;
        sf::Time time;
#define SIZE 64

 

while (time.asSeconds() >= 0.1)
        {
                animAttack.x++;
                if (animAttack.x * SIZE >= (xSprite * SIZE) * 5)
                {
                        animAttack.x = 1;
                }
                time = clock.restart();
        }
 

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space) && animWalk.y == Up)
        {
                attack = true;
                walk = false;
                animAttack.y = Up;
                playerSprite.setTextureRect(sf::IntRect(animAttack.x * SIZE, (ySprite * SIZE) * 12, SIZE, SIZE));
        }
 

PS: le animWalk.y == Up c'est juste pour prendre son orientation :p

Merci pour votre aide
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #1 le: Août 25, 2016, 03:24:01 pm »
Bah mets ton playerSprite.setTextureRect(sf::IntRect(animAttack.x * SIZE, (ySprite * SIZE) * 12, SIZE, SIZE)); à l'intérieur de ton while (time.asSeconds() >= 0.1)
(pourquoi un while inutile plutot qu'un if ?)

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #2 le: Août 25, 2016, 03:32:45 pm »
Je crois que je me suis mal exprimer mon animation d'attack marche mais pour quelle soit entièrement faite il faut que je fase plusieurs fois Espace et moi j'aimerais quelle se fase toute seule après avoir appuyer sur espace si je fait comme tu ma dit ça reviens à mon problème m'animation ce fait image par image
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #3 le: Août 25, 2016, 03:52:32 pm »
Ben non, à moins que tu n'aies mis ce while dans ton if iskeypressed ou dans la boucle d'évènement ou que tu changes ton textureRect pour un truc qui prend pas en compte ton animation ailleurs.
Perso dans ton code je le vois dans nul part vu que tu as juste donnés des petits bouts donc dur de savoir ce qui se passe vraiment.

clock.restart() ça renvoie la même chose que clock.getElapsedTime() puis ça remet l'horloge à 0. ça n'a aucun intérêt de mettre ça dans time, c'est même faux d'après ta façon de faire.

Bref en se basant sur ce que tu fais quelque chose comme ça devrait fonctionner non ?

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space) && animWalk.y == Up)
    {
        attack = true;
        walk = false;
        animAttack.y = Up;
    }

time = clock.getElapsedTime();

if (attack == true && time.asSeconds() >= 0.1)
    {
        animAttack.x++;
        if (animAttack.x * SIZE >= (xSprite * SIZE) * 5)
        {
            animAttack.x = 1;
        }
        clock.restart();
        playerSprite.setTextureRect(sf::IntRect(animAttack.x * SIZE, (ySprite * SIZE) * 12, SIZE, SIZE));
    }

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #4 le: Août 25, 2016, 04:00:24 pm »
Non ça ne fonctionne pas voila ma classe entiere pour que tu mieux voir ;p
http://pastebin.com/j9nhwf5w
http://pastebin.com/fQUgriPv
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #5 le: Août 25, 2016, 05:02:15 pm »
Ben oui si tu mets à jour le textureRect uniquement quand tu appuies sur espace donc ben ton animation fonctionne juste quand tu appuies sur espace. Logique non ?  ???
C'est le cas quand tu appuies sur espace et que attack = true : y'a aucun setTextureRect à part quand espace est enfoncé. (et que t'appuies pas sur les fleches bien sur)

Tant que t'appelles setTextureRect quand ton animation change de frame ça devrait fonctionner. Je vois pas pourquoi ce que j'ai donné dans mon 2eme post ne fonctionnerait pas mais c'est peut-etre moi qui ai loupé quelque chose.

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #6 le: Août 25, 2016, 05:16:40 pm »
J'ai essayer comme tu ma dit ça fait toujours de l'image par image après j'ai essayer de le mettre dans le if de chaque attack ça fait toujours image par image
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Re : Problème d'animation de mon personnage
« Réponse #7 le: Août 25, 2016, 05:24:25 pm »
Ben non, à moins que tu n'aies mis ce while dans ton if iskeypressed ou dans la boucle d'évènement
? ? ? ? ? ?

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #8 le: Août 25, 2016, 05:27:04 pm »
Première essaie
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space) && animWalk.y == Up)
        {
                attack = true;
                walk = false;
                animAttack.y = Up;
        }
        if (attack == true && time.asSeconds() >= 0.1)
        {
                animAttack.x++;
                if (animAttack.x * SIZE >= (xSprite * SIZE) * 5)
                {
                        animAttack.x = 1;
                }
                playerSprite.setTextureRect(sf::IntRect(animAttack.x * SIZE, (ySprite * SIZE) * 12, SIZE, SIZE));
        }
 

Second essaie
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space) && animWalk.y == Up)
        {
                attack = true;
                walk = false;
                animAttack.y = Up;
                if (attack == true && time.asSeconds() >= 0.1)
                {
                        animAttack.x++;
                        if (animAttack.x * SIZE >= (xSprite * SIZE) * 5)
                        {
                                animAttack.x = 1;
                        }
                        playerSprite.setTextureRect(sf::IntRect(animAttack.x * SIZE, (ySprite * SIZE) * 12, SIZE, SIZE));
                }
        }
 

Tous est dans la fonction Update
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #9 le: Août 25, 2016, 05:32:21 pm »
Et tu l'appelles dans la boucle d'évènement ta fonction Update ?

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #10 le: Août 25, 2016, 05:34:10 pm »
Oui dans le main
#include "Player.hpp"

#include <SFML\Graphics.hpp>


int main()
{
        Player player;

        sf::RenderWindow window(sf::VideoMode(800, 600), "RPG");

        //window.setFramerateLimit(60);
        //window.setVerticalSyncEnabled(true);

        while (window.isOpen())
        {
                sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == event.Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                        {
                                window.close();
                        }
                        player.Update(event);
                }
                player.Draw(window);
                window.display();
                window.clear();
        }
}
 
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #11 le: Août 25, 2016, 05:40:27 pm »
Citer
        while (window.pollEvent(event)) <---- BOUCLE D'EVENEMENT
        {
            if (event.type == event.Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
            {
                window.close();
            }
            player.Update(event); <---- FONCTION UPDATE
        } <----  FIN DE LA BOUCLE D'EVENEMENT

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #12 le: Août 25, 2016, 05:41:30 pm »
Il faut donc pas que je le mette dans la boucle d'event c'est ça ?
L'échec est la preuve que l'on à essayer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #13 le: Août 25, 2016, 05:52:46 pm »
si je fait comme tu ma dit ça reviens à mon problème m'animation ce fait image par image
= ça marche pas
Ben non, à moins que tu n'aies mis ce while dans ton if iskeypressed ou dans la boucle d'évènement
= si, sauf si tu as mis ce code dans la boucle d'évènements

:'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( ;D ;D ??? :) :-[ :-[ :D :D ;D >:( :-* ??? ??? 8) :o :o
Tu NE DOIS PAS :
- appeler update à l'intérieur de la boucle d'évènement (sinon ce qu'il y a dedans est déclenché uniquement quand il y a un évènement (par ex: appuyer sur un bouton, bouger la souris, etc.)
- modifier ton textureRect uniquement quand isKeyPressed(espace) (sinon ce qu'il y a dedans est déclenché uniquement pendant que espace est enfoncé)

Si tu fais ce qui est dans mon 1er message en prenant soin d'appeler update HORS de la boucle d'évènements je crois que ça devrait marcher.

TheYoungGeek43

  • Jr. Member
  • **
  • Messages: 87
    • Voir le profil
Re : Problème d'animation de mon personnage
« Réponse #14 le: Août 25, 2016, 06:20:18 pm »
Merci ça fonctionne il me faut juste trouver un moyen pour qu'il s'arrete car là il faut le truc en boucle en tous cas merci pour tous

PS: je suis débutant :p

EDIT : j'ai trouver :p
L'échec est la preuve que l'on à essayer