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

Auteur Sujet: Déplacement par case  (Lu 3480 fois)

0 Membres et 1 Invité sur ce sujet

cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
Déplacement par case
« le: Septembre 06, 2012, 12:50:06 pm »
Bonjour, je reprend le développement de mon bomberman et je reprend la où j'avais echouer à savoir le déplacement par case.

J'ai codé ceci pour, que lorsque la frame == 0 on puisse déplacer le joueur, et quand la frame == 7 on peut tester l'appuie des touches, sauf que la condition _animation->estLancer(), ne s'effectue pas au debut de chaque annimation.

Voici le code:

// Met à jour le joueur
void Player::update(Event &event)
{
    if(!animer)
    {
        if(Keyboard::isKeyPressed(Keyboard::Down))
        {
            _position = BAS;
            bouger = true;
            animer = true;
        }

        if(Keyboard::isKeyPressed(Keyboard::Up))
        {
            _position = HAUT;
            bouger = true;
            animer = true;
        }

        if(Keyboard::isKeyPressed(Keyboard::Left))
        {
            _position = GAUCHE;
            bouger = true;
            animer = true;
        }

        if(Keyboard::isKeyPressed(Keyboard::Right))
        {
            _position = DROITE;
            bouger = true;
            animer = true;
        }

        if(!bouger) {_animation->arreter();}
        else {_animation->jouer();}
    }
   else
   {
       if(_position == BAS)
       {
            _animation->setAnimation(0);
            if(_animation->estLancer()) {
                _caseActuel += casesX-1;
            }

            else if(_animation->estFini()) {
                animer = false;
                bouger = false;
            }
        }
    }
}
 

Merci d'avance.

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : Déplacement par case
« Réponse #1 le: Septembre 06, 2012, 07:42:13 pm »
Je pense que l'erreur vient de :

_animation->setAnimation(0);

Je pense que ta méthode reset et met en pause ton annimation.

            _animation->setAnimation(0);
            if(_animation->estLancer()) {

Donc tu pauses l’animation, juste avant le test. Après, on peut difficilement faire mieux avec si peut d'information. Peut-être que le hearder pourra nous aider à t'aider  ;D

Par contre le francoglish   >:(
« Modifié: Septembre 06, 2012, 07:44:52 pm par Orwel »

cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
Re : Déplacement par case
« Réponse #2 le: Septembre 06, 2012, 10:37:02 pm »
Bon, je pense que je vais tous refaire...

Pouvez-vous me conseillez la meilleur façon de faire du déplacement case par case.


Cordialement.

cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
Re : Déplacement par case
« Réponse #3 le: Septembre 07, 2012, 06:45:48 pm »
Personne ?

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : Déplacement par case
« Réponse #4 le: Septembre 08, 2012, 07:51:12 am »
Il nous faudrait plus d'information sur ton projet. Car en fonction de la taille, peut-être que tu pourra déléguer certaine fonctionnalité à d'autre module.

cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
Re : Déplacement par case
« Réponse #5 le: Septembre 08, 2012, 11:29:04 am »
Voici les classes du projet:

- Screen.h
- Application.h
- configuration.h
- TitleScren.h
- Case.h
- Map.h
- Player.h
- Animation.h

J'ai repris la technique de la doc pour gérer mes différents screens.

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : Déplacement par case
« Réponse #6 le: Septembre 08, 2012, 05:41:01 pm »
Si tu as des difficltés pour ton projet, peut-être qu'il n'est pas de ton niveau. Quelque chose de plus simple pour débuter peut-être une solution.

On sait uniquement qu'il y a des déplacements par case. Quelle type de jeu désire-tu réaliser???

Voici quelles que erreur de conception. La fonction Update prend un sf::Event. Pourquoi???

Donc la fonction Update est appelé uniquement si j'appuie sur une touche( c'est réductif). Hors ta fonction s'occupe de gérer l'animation, et une animation peut se finir sans l'appuie d'une touche. Il faut donc 2 fonctions, une pour traiter les événements, une pour l'évolution de Player.

Aussi un conseil, ce n'est pas à la classe player de gérer les évènements. Mais à Application, qui appellera une fonction, par exemple Player::setAction(const ActionPlayer&)


cChaD

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
Re : Déplacement par case
« Réponse #7 le: Septembre 09, 2012, 12:56:59 am »
Je pense bien aussi, mais hélas je n'ai sait pas par quoi commencer pour m’entraîner à coder que sa soit SFML ou C++, mais je préfère m'exercer avec la sfml.