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

Développement 2D, 3D et Jeux Discussion :

déplacement d'un sprite


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre confirmé
    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
    Points : 546
    Points
    546
    Par défaut déplacement d'un sprite
    Bonjour à tou(te)s,

    J'ai un sprite, dans mon application, qui fait un mouvement. Chaque frame est légèrement décalée par rappport au départ du sprite.

    Vaut-il mieux faire l'affichage sans bouger le sprite global (chaque frame subissant son propre décalage) puis, à la fin de l'animation, décaler le sprite d'un coup ?

    Ou alors déplacer le sprite au fur et à mesure des frames, chaque frame étant alors calée sur la position du sprite ?

    Merci pour vos avis et/ou conseils

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    (j'ai eu un peu de mal à comprendre )

    Normalement il vaut meux caler toutes les frames sur la même position, et déplacer le sprite continuellement. Ca permet notamment que la vitesse de déplacement ne soit pas dépendante de l'animation.

  3. #3
    Membre confirmé
    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
    Points : 546
    Points
    546
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    Ca permet notamment que la vitesse de déplacement ne soit pas dépendante de l'animation.
    Buzzzzz !
    Eh non ! Vous avez perdu ! vous voulez rejouer ?

    Imaginer un vaisseau ou un projectile, il n'y a pas de problème. Mais pour un personnage, la vitesse de son déplacement est bien dépendante de l'animation... D'où mon souci

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 376
    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 376
    Points : 20 438
    Points
    20 438
    Par défaut
    Je cros piger son problème ; Mindiell tu demandes s'il faut faire un scrolling auto de l'écran et le perso reste fixe ( avec le scrolling on a l'impression qu'il se déplace ) ?
    Ou bien le perso se déplace réellement et on fait un scrolling s'il atteint les bords de l'écran ?
    ->Faut voir essayer les 2 méthodes et ce qui est le plus estéthique
    Ou alors déplacer le sprite au fur et à mesure des frames, chaque frame étant alors calée sur la position du sprite ?
    Cela se fait par tatonnements et ajustements ; tout dépend de la taille du sprite du rendu graphique etc...
    Les animations on les fait selon un delta de temps ou bien tous les x milliseconds avec un pointeur d'image cadre.
    Donc faut ajuster le delta t.

  5. #5
    Membre habitué
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Points : 145
    Points
    145
    Par défaut
    Perso moi ce que j'ai compris, c'est qu'il veut faire avancer son perso en fonction de ses pas, et je répondrais que ça sert à pas grand chose.

  6. #6
    Membre expérimenté
    Avatar de Manumation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1 153
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 153
    Points : 1 469
    Points
    1 469
    Par défaut
    Ou bien le perso se déplace réellement et on fait un scrolling s'il atteint les bords de l'écran ?
    Ou le mieux, c'est de faire un scrolling s'il atteint le milieu de l'écran...

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    1: Le problème est mal posé je pense.

    la vitesse de son déplacement est bien dépendante de l'animation...
    Son déplacement est juste une suite de déplacement linéaire ou non linéaire qui ont une vitesse propre à la courbe d'animation, donc j'ai pas du comprendre le problème...

    puis, à la fin de l'animation, décaler le sprite d'un coup ?
    Il se téléporte ?
    Tu as pas la réponse dans ta question ?

    goto 1:

    La réponse à Laurent me semblait bonne "déplacer le sprite continuellement" dans le temps, suivant la courbe d'animation.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 37
    Points : 34
    Points
    34
    Par défaut
    À mon tour d'essayer de deviner le problème! ^_^

    J'ai l'impression que Mindiell a créé un sprite animé, et que dans chacune des frames de ce sprite (çàd dans les images qui constituent le sprite, pas encore dans le jeu) il décale un peu le personnage en fonction de l'avancée de l'animation. Par exemple dans la première image le perso est à (0,0), dans la seconde à (1,0), dans la troisième à (5,0)...

    Avec ce système il place le sprite toujours au même endroit à l'écran, le déplacement s'effectue "à l'intérieur" du sprite, et lorsque l'animation boucle il téléporte le sprite à la position finale.

    Du moins c'est ce que j'ai compris!

    Je pense que Laurent Gommila et Ti-R ont raison, il vaut mieux s'arranger pour que le sprite soit déplacé continuellement, suivant une équation de vitesse simple. Par contre, pour garder un mouvement apparent qui soit synchrone avec l'animation, tu peux peut-être dessiner quelques frames décalées vers l'avant et d'autres vers l'arrière (suivant qu'elles sont "en avance" ou "en retard" sur le mouvement continu de ton équation).

  9. #9
    Membre confirmé
    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
    Points : 546
    Points
    546
    Par défaut
    Ough ! J'explique si mal que ca ?

    Alors celui qui a le mieux compris c'est .... tadam .... Lorannt !

    J'ai, en effet, une zone dans laquelle le sprite est animé. Cette zone est plus grande que le sprite, il commence son animation à gauche, par exemple, et la finit à droite. Je "téléporte" donc la zone entière pour la prochaine animation.

    C'est plutôt mauvais, dans le sens où le joueur s'arrête peut-être au milieu de l'animation...

    Le déplacement linéaire me pose problème dans le sens où le déplacement d'un humain qui marche n'est pas linéaire. On passe plus de temps entre chaque pas (en gros) qu'au moment où on tombe en avant pour le prochain pas.

    L'idée de lorrant semble bonnemais je me dis que, quitte à avoir un déplacement pas tout à fait linéaire, autant stocké chaque décalage dans chaque frame non ? Ainsi, ce sont les frames qui déplacent le sprite et lorsqu'on change d'animation (pour l'arreter par exemple), le sprite est au bon endroit. Je vais essayer ca pour voir, je vous tiens au courant.

    bogoss91> Ta réponse, pas franchement constructive, me laissepensif. Si j'ai besoin de caler l'animation, c'est que j'en ai besoin...

  10. #10
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    A part que le jour où tu vas vouloir gérer les collisions ou le jour où tu veux faire évoluer deux éléments qui n'ont pas les mêmes animations, cela va être vraiment difficile...

    Jc

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le déplacement linéaire me pose problème dans le sens où le déplacement d'un humain qui marche n'est pas linéaire. On passe plus de temps entre chaque pas (en gros) qu'au moment où on tombe en avant pour le prochain pas.
    Ca c'est pas un problème, tu peux utiliser une courbe de déplacement quelconque (pas forcément linéaire).

  12. #12
    Membre confirmé
    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
    Points : 546
    Points
    546
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    A part que le jour où tu vas vouloir gérer les collisions ou le jour où tu veux faire évoluer deux éléments qui n'ont pas les mêmes animations, cela va être vraiment difficile...
    Pourquoi ?
    Mon sprite charge ses frames et chaque frame indique au sprite qu'il se déplace. Je ne gère pas la vitesse du sprite, elle se gère seule.
    Au niveau des collisions j'ai toujours un rectangle à tester.

    Deux éléments qui n'ont pas la même animation possèdent donc des frames différentes, et donc des vitesses différentes.

    Laurent> Plutôt que d'avoir une courbe pour chaque sprite animé, autant avoir le x et le y de déplacement du sprite au moment où il affiche la frame en cours...

    Je découpe un sprite, je teste et je vous dis

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 96
    Points : 137
    Points
    137
    Par défaut
    je ne sais pas si j'ai bien compris le problème mais pour l'histoire de caler les pas d'un sprite 2d sur son déplacement ce n'est pas évident

    je connais 2 façons (yen a surement dautres)

    -soit la vitesse d'animation du sprite est inférieure a la vitesse de rafraichissement du jeu (ce qui est le cas pour tout jeu time-based) dans ce cas on ne peut pas parfaitement caler les pieds sur le sol il faut faire une approximation

    la vitesse sur X en pixel par milliseconde est egale a la longueur du pas (en pixel) multipliée par le nombre de pas par milliseconde (en pixel/ms)

    mais tu n'auras pas un effet d'adhésion parfait au sol



    -maintenant si tu veut vraiment une adherence parfaire au sol il faut

    d'une part travailler en frame-based comme les emulateurs de vieilles consoles et donc imposer un framerate arbitraire (genre 60) qui va rendre assez mal les vitesses rapides sur les ecrans qui n'ont pas le meme framerate que ton jeu, donc il vaut mieux avoir des deplacements lents type 1 à 2 pixel par frame pour pas que ça se voie

    et d'autre part il faut fournir suffisemment d'images pour que la cadence d'animation du sprite soit la même que celle du jeu, ce qui fait 2 à 4 fois plus de dessins



    voilà et bon courage

  14. #14
    Membre actif 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
    Points : 245
    Points
    245
    Par défaut
    Moi j'ai rien compris tout au long des posts >.<

    En tous cas si tu veux une petite idée de ce qu'est un bon scrolling, regarde ici ( le titre du chapitre c'est tiling, mais télécharges les sources et lances l'exe tu verras ça marche plutot bien leur truc ).

Discussions similaires

  1. [SDL 1.2] Déplacement d'un Sprite avec Scrolling
    Par stephantasy dans le forum SDL
    Réponses: 4
    Dernier message: 30/04/2014, 09h07
  2. Déplacement d'un sprite
    Par Jyhem dans le forum Débuter
    Réponses: 9
    Dernier message: 19/06/2009, 19h54
  3. Réponses: 21
    Dernier message: 01/03/2009, 23h41
  4. Réponses: 10
    Dernier message: 03/03/2007, 13h46

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