Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > Déplacement de link dans zelda > Lecture du sujet

Déplacement de link dans zelda

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne djipey # Posté le 24/07/2008 à 07:03:54
Groupe : Membres
Bonjour!! voila le sujet du post c'est le déplacement de Link dans un jeu comme zelda.
Le principe:

-Si j'appuie sur une seule touche directionnelle, Link se déplace dans cette direction uniquement.

-si j'appuie sur deux touches directionnelles, je garde la direction de la premiere touche enfoncée(ainsi que ses sprites), et j'effectue le déplacement que donne la deuxieme touche enfoncée
exemple: droite puis bas, je vois link de profil, se déplaçant en diagonale vers la droite et le bas.

-Link se fige si j'appuie sur trois ou quatre touches directionnelles en même temps.

Je suis arrivé après moult réfléxion à résoudre les deux premiers points, et je vous demanderai de ne pas proposer de nouvelle solution aux problèmes s'y référant, ce n'est pas le but de ce post.
Je voudrais simplement que vous m'expliquiez pourquoi quand j'appuie sur (gauche,bas et droite)
OU (haut,bas et droite) , et seulement dans ces deux cas de figure, Link se fige, et pourquoi pas dans les deux autres cas possibles.

Je vous donne le code de ma classe.

Keyboard.cpp:
Code : C++
  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
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <SFML/Graphics.hpp>
#include "Keyboard.h"
#include "Personnage.h"



Keyboard::Keyboard()
{

}

void Keyboard::Touches(sf::RenderWindow &Ecran,Personnage &link,const sf::Input &Input)
{
    cptTouches = 0;

    Ecran.GetEvent(Event);
    Ecran.GetInput();


    switch(Event.Type)
        {
            case sf::Event::Closed:
            Ecran.Close();
            break;

            case sf::Event::KeyPressed:
            switch(Event.Key.Code)
            {
                case sf::Key::Escape:
                Ecran.Close();
                break;

                default:
                break;
            }
            break;


            default:
            break;
        }


        /*le haut*/
        if(Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Left) && !Input.IsKeyDown(sf::Key::Right))
        {
            link.DeplacerPerso(HAUT, Vecteur);
            link.SetOrdonnee(38,74);

        }

        else if (Input.IsKeyDown(sf::Key::Up))
        {
            link.DeplacerPerso(HAUT, Vecteur);
            cptTouches++;
        }



        /*le bas*/
        if(Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Left) && !Input.IsKeyDown(sf::Key::Right))
        {
            link.DeplacerPerso(BAS, Vecteur);
            link.SetOrdonnee(0,36);
        }

        else if(Input.IsKeyDown(sf::Key::Down))
        {
            link.DeplacerPerso(BAS, Vecteur);
            cptTouches++;
        }





        /*la gauche*/
        if(Input.IsKeyDown(sf::Key::Left) && !Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Right))
        {
            link.DeplacerPerso(GAUCHE, Vecteur);
            link.SetOrdonnee(0,36);
        }

        else if(Input.IsKeyDown(sf::Key::Left))
        {
            link.DeplacerPerso(GAUCHE,Vecteur);
            cptTouches++;
        }



        /*la droite*/
        if(Input.IsKeyDown(sf::Key::Right) && !Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Left))
        {
            link.DeplacerPerso(DROITE, Vecteur);
            link.SetOrdonnee(76,112);
        }

        else if(Input.IsKeyDown(sf::Key::Right))
        {
            link.DeplacerPerso(DROITE,Vecteur);
            cptTouches++;
        }


        if(cptTouches >= 3)
        link.Paralysie(true);

        else
        link.Paralysie(false);

}


note: des lecteurs attentifs remarqueront que je blitte les mêmes sprites pour la gauche et le bas, mais c'est juste parce que je n'ai pas encore fait les sprites pour la gauche, et cela n'intervient pas dans le déplacement de Link.

Un grand merci à toute l'aide que vous pourrez m'apporter.
Édité le 24/07/2008 à 07:06:03 par djipey
Hors ligne djipey # Posté le 27/07/2008 à 15:22:58
Groupe : Membres
UP

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 543 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0504s (0.0287s)