J'essaie de créer un simple moteur physique 2D en ce moment, et je rencontre des problèmes pour trouver comment incorporer l'élan au mouvement d'un vaisseau spatial.
Si je me déplace dans une direction donnée à une certaine vitesse, je suis actuellement en mesure de mettre à jour facilement la position de mon navire (Position + = Direction * Velocity). Cependant, si le navire tourne du tout et que je recalcule la direction (en fonction du nouvel angle auquel le navire fait face) et que j'accélère dans cette direction, comment puis-je prendre en compte l'élan pour modifier la "ligne" que le navire parcourt? Actuellement, le navire change de direction instantanément et continue à sa vitesse actuelle dans cette nouvelle direction lorsque j'appuie sur le bouton de poussée. Je veux que ce soit un mouvement de virage plus progressif afin de donner l'impression que le navire lui-même a une certaine masse.
S'il y a déjà un bon article sur ce sujet, je m'excuse, mais rien n'est apparu dans mes recherches. Faites-moi savoir si d'autres informations sont nécessaires, mais j'espère que quelqu'un pourra facilement me dire comment je peux ajouter la vitesse de masse * à ma mise à jour de la boucle de jeu.
Réponses:
Il semble que vous ayez Position et Direction comme vecteurs et Velocity comme scalaire?
Si c'est le cas, changez également Velocity en vecteur et faites quelque chose comme ceci:
La direction étant un vecteur de longueur unitaire donnant le cap de votre navire. La puissance étant la quantité de poussée que vous souhaitez ajouter (zéro lorsqu'aucune accélération n'est requise)
Si vous voulez en savoir plus, vous pouvez rechercher l'intégration d'Euler
la source
Au lieu de manipuler directement la vitesse , ajoutez une autre variable: l' accélération , qui modifie progressivement et en douceur la vitesse :
De la physique classique ( lois du mouvement de Newton ):
où:
(Remarque m est la seule valeur scalaire; F, a, v et p sont tous des vecteurs 2D ou 3D)
En outre, il existe en fait deux directions:
J'ai répondu à une question connexe sur StackOverflow: mouvement 2D des vaisseaux spatiaux . Il y a un exemple de code dans cette réponse.
la source