Der eigentliche Trick dabei ist die Wissenschaft auf Hochschulniveau; was Sie sollten getan haben. Für den Fall , dass Sie bekommen nicht eine schnelle Google - Suche haben Sie begonnen . Um zu erklären, wie Sie die Denkweise von „Anfängern“ umgehen, nehmen Sie das Beispiel der Mondlandefähre .
Sobald Sie gelesen haben, dass [change in position] = [velocity] * [time passed]
es klar wird, dass Sie diese Variablen im Auge behalten müssen:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Anschließend würden Sie die Velocity einfach auf die Position jedes Frames anwenden:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Jetzt möchten wir die Geschwindigkeit jedes Frames ändern, damit wir die Schwerkraft hinzufügen können. Nach genau der gleichen Quelle [change in velocity] = [acceleration] * [time passed]
. Deshalb können wir genau dasselbe Prinzip anwenden:
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;
Jetzt brauchen Sie eine Möglichkeit für den Spieler, sein Raumschiff zu steuern. Wenn Sie mehr über die Grundlagen der Physik lesen, werden Sie feststellen, dass Bewegung das Ergebnis von Gewalt ist - ich kann jedoch keine Quelle finden [change in acceleration] = ([force] / [mass]) * time
(soweit ich mich erinnere). Wenn der Player also eine Taste drückt, setzen Sie einfach die Variablen fx
und fy
auf etwas und wenden die Gleichung während des Updates an.
Letztendlich müssen Sie über die Physik rund um die Objekte in Ihrem Spiel nachdenken - und anstatt zu versuchen, sie so zu bewegen, wie Sie es denken würden, sollten Sie die Gleichung nachschlagen .
Zukunft Hinweis: Denken Sie daran , dass dies definitiv nicht der beste Weg , Physik zu tun (dies wird Euler Integration bezeichnet und kann bei niedrigeren Frameraten zu einigen ungeradeen Szenarien führen) - Sie in schauen müssen andere Möglichkeiten , Dinge zu tun (Dieser Artikel hat eine ganze auch eine nette Zusammenfassung der Grundlagen). Bleiben Sie jedoch vorerst bei der Euler-Integration, denn dies bedeutet, dass Sie versuchen, eine Sache weniger zu lernen.
Welche Spiele würden Sie lehren, wie man in der richtigen Denkweise denkt?
Wie würden Sie testen, ob Sie die Dinge richtig und mit der richtigen Einstellung gemacht haben? Fügen Sie eine Sleep(10 milliseconds)
in Ihre Spieleschleife ein und alles sollte sich noch bewegen und genauso reagieren wie die volle Bildrate.
Halten Sie sich bitte von 3D fern (und erzwingen Sie Quaternions und Matrizen), bis Sie eine gute Erfahrung damit haben, 2D-Spiele zum Laufen zu bringen. Ich möchte sagen, dass einige Spieleentwickler nicht wirklich wissen, wie Quaternions oder Matrizen funktionieren - sondern nur wissen, wie man sie verwendet -, um sich ihnen viel später zu nähern (oder nie, 2D-Spiele machen viel Spaß und können recht sein erfolgreich). Sie müssen die lineare Algebra und so weiter nicht wirklich kennen, um dies auf der Grundstufe zu tun (aber es hilft wirklich, also gehen Sie zu einigen Nachtklassen, wenn Sie können).
Letzter Bonus: Eine Sache, die mir mein Kunstlehrer immer sagte, ist: "Zeichne nicht, was du denkst , was du siehst, sondern zeichne , was du siehst." Dasselbe gilt hier: "Modelliere nicht, was du denkst, passiert ( object.position++
), modelliere, was passiert (` object.position + = velocity * time) "- zumindest bis zu vernünftigen Grenzen (du modellierst kein perfekt genaues System, sondern machst etwas, das eine gute Nachahmung ist).