Le vrai truc avec ceci est la science au niveau secondaire; ce que vous auriez dû faire. Si vous n'avez pas effectué de recherche rapide sur Google, vous commencerez . Pour expliquer comment vous évitez la mentalité de «novice», prenez l' exemple de l' atterrisseur lunaire .
Une fois que vous avez lu [change in position] = [velocity] * [time passed]
qu'il devient clair qu'il faudrait garder une trace de ces variables:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Ensuite, vous appliqueriez simplement la vitesse à la position de chaque image:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Maintenant, nous aimerions modifier la vitesse de chaque image afin d'ajouter de la gravité. Selon la même source exacte [change in velocity] = [acceleration] * [time passed]
. Par conséquent, nous pouvons appliquer exactement le même principe:
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Maintenant, vous avez besoin d'un moyen pour le joueur de contrôler son vaisseau spatial. En lisant plus sur la physique de base, vous apprendrez que le mouvement est le résultat de la force - je ne trouve pas de source mais [change in acceleration] = ([force] / [mass]) * time
(pour autant que je m'en souvienne). Ainsi, lorsque le joueur appuie sur une touche, vous devez simplement définir les variables fx
et fy
sur quelque chose et appliquer l'équation lors de votre mise à jour.
En fin de compte, vous devez penser à la physique autour des objets dans votre jeu - et au lieu d'essayer de les faire bouger comme vous le pensez, préférez rechercher l'équation .
Remarque future: rappelez-vous que ce n'est certainement pas la meilleure façon de faire de la physique (cela s'appelle l'intégration d'Euler et peut conduire à des scénarios étranges à de faibles fréquences d'images) - vous devez examiner d' autres façons de faire les choses (cet article a belle rédaction sur les bases nues aussi). Cependant, restez avec l'intégration d'Euler pour l'instant, car cela signifie que vous essayez d'apprendre une chose de moins.
Quels jeux vous apprendraient à penser dans le bon état d'esprit?
Comment testeriez-vous que vous avez fait les choses correctement et avec le bon état d'esprit? Insérez un Sleep(10 milliseconds)
dans votre boucle de jeu et tout devrait toujours bouger et réagir de la même manière que le framerate complet.
Enfin, veuillez vous tenir à l'écart de la 3D (et donc des quaternions et des matrices) jusqu'à ce que vous ayez une bonne expérience de la mise en œuvre des jeux 2D. Je me risquerais à dire que bon nombre de développeurs de jeux ne savent pas vraiment comment fonctionnent les Quaternions ou les matrices - mais savent simplement comment les utiliser - les approcher beaucoup plus tard (ou jamais, les jeux 2D sont très amusants et peuvent être assez réussi). Vous n'avez pas vraiment besoin de connaître l'algèbre linéaire et ainsi de suite pour le faire au niveau de base (mais cela aide vraiment, alors allez à certains cours du soir si vous le pouvez).
Bonus final: Une chose que mon professeur d'art m'a toujours dit: "ne dessinez pas ce que vous pensez voir, dessinez ce que vous voyez". La même chose s'applique ici "ne modélisez pas ce que vous pensez qu'il se passe ( object.position++
), modélisez ce qui se passe (` object.position + = velocity * time) "- au moins dans des limites raisonnables (vous ne modélisez pas un système parfaitement précis, mais faites quelque chose qui est une bonne immitation).