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

Physique Discussion :

Moteur physique 2D


Sujet :

Physique

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 43
    Points
    43
    Par défaut Moteur physique 2D
    Bonjour

    Je suis actuellement en train d'essayer de faire un moteur physique 2D afin de réaliser un mario-like. Pour cela j' aimerai votre avis sur ma façon de procéder et également vous poser quelques questions. J'espère que vous me comprendrez en tous cas (j'ai peur de tous mélanger dans ce que je vais raconter).

    => Gestion de la gravité.
    C'est le premier point où j' aimerai bien votre avis. Voilà, supposons que j'ai un objet Box. A cet objet j'ai deux vecteurs.
    Un vecteur ACCELERATION.
    Un vecteur VITESSE.
    La composante Y du vecteur ACCELERATION a comme valeur: -9.81

    À chaque tour de boucle, je mets à jours les coordonnées de Box de cette façon:
    VITESSE.y = VITESSE.y + ACCELERATION.y
    Y = Y + VITESSE.y

    Pour soumettre un objet à la gravité, est-ce une bonne façon ?

    => Detection du sol
    Alors là j'ai un peu plus de mal. Parceque je trouve que ma méthode fait un peu bidouillage...
    Voilà comment je procède à chaque tour de boucle:

    VITESSE.y = VITESSE.y + ACCELERATION.y
    // Si la boîte passe à travers le sol...
    SI( ObtenirPixel(Box.x, Box.y - VITESSE.y) = NOIR)
    | i = DISTANCE Box-Sol
    | Box.y = Box.y - i
    SINON
    | Box.y = Box.y - VITESSE.y

    Donc en fait, je regarde à chaque tour de boucle si une fois que mes coordonnées seront mise à jour, si la boîte ne sera pas passé à travers le sol à cause d'une trop grosse valeur de VITESSE.y
    Cette méthode marche. Mais pas par exemple si j'ai une plateforme dans les air qui a une hauteur de 10 pixels. La boîte passera à travers. Donc je suppose que ma méthode fait trop bricolage non ? Comment procéderiez-vous de votre côtés ?

    => Une fois au sol
    Une fois au sol, je met la valeur de ACCELERATION.y à zéro. Pour indiquer que la réaction du sol compense la pesanteur. Est-ce une bonne façon de faire ? Parceque de cette façon, ça indique à mon moteur que le personnage ne "descend" plus.


    Donc voilà, ce sont mes plus "gros problèmes". J'ai cherché de mon côtés, et je trouve que ça fait un peu "à l' arrache" comme méthode, et donc j'aimerai avoir votre avis.

    A tout hasard, quelqu'un connaît un bon bouquin pour implanter de la physique dans un jeu de plate-forme ? Ou alors même un article (anglais ou français) Car j'ai certes les notions de Terminale S mais j'ai du mal à les appliquer à un jeu vidéo.

    En tous cas merci d'avance à ceux qui me liront et répondrons.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Il te fauit une detection de collision, et une fois la colision detectée, il te faut un algorhytme de reponse au collisions.

    Le fait d'ajouter une raction du sol te garantis un mouvement rectiligne et uniforme selon newton. Ca n'est pas du tout ce que tu veux si ?

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 381
    Points
    20 381
    Par défaut
    La composante Y du vecteur ACCELERATION a comme valeur: -9.81
    Laisse tomber la pesanteur tu te compliques la vie pour rien.
    Oui tu est obligé de bidouiller un peu parce que tu ne peux pas faire quelque chose de standard.
    Si tu fais un moteur physique ou tu implémentes des règles de physique pour un mario-like ces règles ne pourront pas s'appliquer forcément à un jeu de voiture par exemple.
    L'exemple flagrant c'est Flight Simulator: ils ont voulu faire des modèles de vol pour chaque avion donné le plus proche de la réalité.
    Mais si tu prends les avions de base de FS ils sont ignobles à piloter...

  4. #4
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 43
    Points
    43
    Par défaut
    Donc en clair je laisse tomber tous ce qui est gestion de la gravité et je fais quelque chose de très basique ? Du genre à chaque tour de boucle je descend mon personnage de Y pixels pour simuler la gravité ?

  5. #5
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    A mon avis, à partir du moment où tu gères déjà la vélocité et l'accélération autant gérer aussi la gravité. Au contraire, ca simplifiera des actions tels que le saut. Pour sauter t'auras juste à ajouter un vecteur alors que si tu gères que la position du sprite, tu devras définir ta courbe de saut à la main mais aucun intérêt d'avoir des vecteurs accélération et vitesse.
    Enfin c'est ce qui me vient à l'esprit mais je suis pas un expert ^^
    Vive les roues en pierre

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 381
    Points
    20 381
    Par défaut
    bon en fait oui tu peux prendre la pesanteur mais pour pinailler je préférer plutot parler de masse du perso ou bien d'accélération.
    A toi d'ajuster selon certaines variables pour peaufiner le mouvement mais faire intervenir une constante=9,81 je n'en vois pas l'intérêt

  7. #7
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    bon en fait oui tu peux prendre la pesanteur mais pour pinailler je préférer plutot parler de masse du perso ou bien d'accélération.
    A toi d'ajuster selon certaines variables pour peaufiner le mouvement mais faire intervenir une constante=9,81 je n'en vois pas l'intérêt
    je suis assez d'accord. A moins de s'assurer à tout les niveau que l'ensemble des ressources sont bien dans le système de mesures international, utiliser des valeurs "réelles" risque plus de poser des problèmes qu'autre chose...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

Discussions similaires

  1. Moteur physique 2D
    Par CaptainChoc dans le forum Physique
    Réponses: 6
    Dernier message: 07/08/2006, 22h47
  2. [FAQ] [3D] Physique, moteur physique
    Par Rafy dans le forum Contribuez
    Réponses: 7
    Dernier message: 04/06/2006, 17h51
  3. [Tuto] [3D] Moteur physique
    Par Rafy dans le forum Contribuez
    Réponses: 7
    Dernier message: 04/06/2006, 13h57
  4. Moteur Physique
    Par Jbx 2.0b dans le forum Physique
    Réponses: 6
    Dernier message: 11/03/2005, 12h29
  5. Moteur physique : comment l'implémenter ?
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/12/2003, 12h56

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