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

SDL Discussion :

Mouvement Player Diagonale


Sujet :

SDL

  1. #1
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut Mouvement Player Diagonale
    Dans le cadre du développement d'un jeu de shoot en 2D, je suis confronté a un probleme : je désire faire bouger en diagonale une surface représentant mon Player. Le mouvement du Player est de 7 pixels a chaque pas et j'ais raisonné comme suit :
    -le pas doit etre aussi "grand" en diagonale qu'en ligne droite, d'où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             *A                     AB = 1 pas en diagonale 
                    *B               AC = 1 pas "normal"
              *C
    -Comme on ne peux modifier l'ordonnée et l'abscisse d'une image en meme temps, j'ai utilisé le théorème de Pythagore ( collège, quand tu nous tient ) pour déterminer de combien de pixels le player doit bouger d'abord en ordonnée, puis en abscisse ( environ 5 en X et Y ). J'ais donc appliqué le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si "Mouvement du Player", Alors 5 += Player_x; SDL_Delay(1); 5 += Player_y;
    Le code marche tres bien, c'est juste que l'effet est tres disgracieux
    Avez vous une méthode pour déplacer une surface en diagonale ?

    De plus, je suis allé faire un tour dans les précédents posts ( ceux d'il y a 6 mois ) et je suis tombé sur ça :
    Si tu es en C++ tu peux aussi utiliser les maps
    Le sujet était la mise en place d'un fichier de configuration performant, mais je ne voit pas du tout ce que sont les maps ... ( a part maps de jeu )
    Pouvez vous m'en dire plus sur ces maps ??

  2. #2
    Membre éprouvé Avatar de razmott
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Par défaut
    Salut !

    c'est juste que l'effet est tres disgracieux
    C'est à dire ? Il y a des clignotements, le personnage n'a pas une animation fluide,... ?

    Pouvez vous m'en dire plus sur ces maps ??
    En C++, les maps sont des structures qui s'utilisent (presque) comme des tableaux. Petite différence cependant : l'indexage se fait par un type quelconque.
    Par exemple tu peux référencer des objets via une chaîne ou un pointeur. Dans le cas d'un nombre, le tableau n'est plus linéaire et devient plus simple à utiliser, mais les maps perdent alors leur utilité première.

    Bon coding !
    @+

  3. #3
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Salut !

    Citation:
    c'est juste que l'effet est tres disgracieux
    C'est à dire ? Il y a des clignotements, le personnage n'a pas une animation fluide,... ?
    En fait le personnage fait d'abord 5 pixels de déplacement en X, puis 5 en Y : cela donne un mouvement "rectangulaire" quoi ...

    En C++, les maps sont des structures qui s'utilisent (presque) comme des tableaux. Petite différence cependant : l'indexage se fait par un type quelconque.
    Par exemple tu peux référencer des objets via une chaîne ou un pointeur. Dans le cas d'un nombre, le tableau n'est plus linéaire et devient plus simple à utiliser, mais les maps perdent alors leur utilité première.
    Peux tu me donner un peu de code stp ?

  4. #4
    Membre éprouvé Avatar de razmott
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Par défaut
    Salut !

    En fait le personnage fait d'abord 5 pixels de déplacement en X, puis 5 en Y : cela donne un mouvement "rectangulaire" quoi ...
    Et si tu enlevais le SDL_Delay ?

    Peux tu me donner un peu de code stp ?
    Pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::map<std::string/*ça c'est le nom*/,
             std::string/*et ça, le pays*/> AssociationNomPays;
    AssociationNomPays["Chirac"] = "France";
    AssociationNomPays["Bush"] = "USA";
    AssociationNomPays["razmott"] = "France";
    Voilà !

    @+

  5. #5
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Et si tu enlevais le SDL_Delay ?
    Euh... Ca reviendrais a modifier X et Y en meme temps donc ça ne marche normalement pas ( j'ais pas testé encore )

    std::map<std::string/*ça c'est le nom*/,
    std::string/*et ça, le pays*/> AssociationNomPays;
    AssociationNomPays["Chirac"] = "France";
    AssociationNomPays["Bush"] = "USA";
    AssociationNomPays["razmott"] = "France";
    Ca pourrais m'etre utile merci

    PS : j'ais une autre question. Pas plus tard que cet aprem, j'ais entrepris de moduler un peu mon code, et un probleme lors de la compilation est survenu:
    ( dsl je n'ais pas de code sur cet ordi ) c'était lors de la création d'un objet de type
    Tile *tile[TOTAL_TILES];
    et cela me disait "declaration of variable shadows parameter" ( je ne suis pas sur je confirmerais )
    Une réponse à ça ?

  6. #6
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    Citation Envoyé par ironzorg
    Comme on ne peux modifier l'ordonnée et l'abscisse d'une image en meme temps,
    Depuis quand ? et pourquoi ?

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par ironzorg
    Une réponse à ça ?
    Cela veut dire que tu as une variable qui a le même nom qu'un paramètre de ta fonction...

    Jc

  8. #8
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Cela veut dire que tu as une variable qui a le même nom qu'un paramètre de ta fonction...
    C'est bon j'ais trouvé merci quand meme ( exactement ce que tu as supposé )

  9. #9
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 543
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 543
    Par défaut
    Les maps ce sont des tableaux associatifs et je n'utiliserais pas trop ce type de conteneur mais plutot std::vector..
    std::map n'est pas toujours souple d'emploi et puis ce serait en théorie plus lent que std::vector , std::list,std::deque parce que pour une clé donnée il ya une fonction de recherche exécutée.
    Imagines si tu as des milliers d'élements comme cela...
    Sinon tu est libre évidemment de prendre std::map ou non..
    Citation Envoyé par ironzorg
    Le code marche tres bien, c'est juste que l'effet est tres disgracieux
    Avez vous une méthode pour déplacer une surface en diagonale ?
    Pour le déplacement en diagonale on peut utiliser l'algorithme de Bresenham: on a un point d'origine et un point de destination le chemin c'est un segment de droite donc à chaque point du segment distancé par un intervalle qui représente le déplacement du joueur eh bien on affiche le personnage..

    ou les transformations trigo avec cos et sin conversions rectangulaire->polaire

  10. #10
    Membre confirmé Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Par défaut
    Les maps ce sont des tableaux associatifs et je n'utiliserais pas trop ce type de conteneur mais plutot std::vector..
    std::map n'est pas toujours souple d'emploi et puis ce serait en théorie plus lent que std::vector , std::list,std::deque parce que pour une clé donnée il ya une fonction de recherche exécutée.
    Imagines si tu as des milliers d'élements comme cela...
    Sinon tu est libre évidemment de prendre std::map ou non..
    La configuration me prend 14 int : j'ai recupéré les valeurs des touches SDL utilisées par mon jeu et les ai remplacées dans mes boucles d'évènements. Je ne pense pas faire une grande différence en utilisant seulement 14 fois std::map au lieu de std::vector ( je me trompe la ? )

    Pour le déplacement en diagonale on peut utiliser l'algorithme de Bresenham: on a un point d'origine et un point de destination le chemin c'est un segment de droite donc à chaque point du segment distancé par un intervalle qui représente le déplacement du joueur eh bien on affiche le personnage..
    Cela revient a utiliser une équation carthésienne de droite nan ? On a, ici, la droite (AB) ( voir plus haut pour la notation ) définie par x = -y, donc je pourrai faire une boucle avec un entier compris entre 0 et 7, et a chaque incrémentation de ma variable, on affiche le player ...

Discussions similaires

  1. [PLAYER] Désinstaller flash player 7
    Par Olivier Delmotte dans le forum Flash
    Réponses: 10
    Dernier message: 02/12/2004, 19h24
  2. [FLASH MX]le mouvement et les sacades
    Par VincentB dans le forum Flash
    Réponses: 6
    Dernier message: 17/01/2004, 00h42
  3. Un .exe a-t-il besoin d'un player?
    Par chezjm dans le forum Flash
    Réponses: 2
    Dernier message: 13/11/2003, 15h49
  4. détection de player
    Par mat10000 dans le forum Flash
    Réponses: 8
    Dernier message: 23/10/2003, 17h36
  5. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 23h09

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