Prawdziwą sztuczką jest nauka w szkole średniej; co powinieneś był zrobić. W przypadku, gdy nie zrobił szybkie wyszukiwanie Google będzie Ci rozpoczął . Aby wyjaśnić, w jaki sposób unikasz sposobu myślenia „początkującego”, weź przykład księżycowego lądownika .
Po przeczytaniu, że [change in position] = [velocity] * [time passed]
stanie się jasne, że trzeba będzie śledzić te zmienne:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Następnie po prostu zastosujesz prędkość do położenia każdej klatki:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Teraz chcielibyśmy zmienić prędkość każdej klatki, abyśmy mogli dodać grawitację. Według tego samego źródła [change in velocity] = [acceleration] * [time passed]
. Dlatego możemy zastosować dokładnie tę samą zasadę:
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;
Teraz potrzebujesz sposobu, aby gracz kontrolował swój statek kosmiczny. Z lektury więcej na temat podstawowej fizyki dowiesz się, że ruch jest wynikiem siły - nie mogę znaleźć źródła, ale [change in acceleration] = ([force] / [mass]) * time
(o ile pamiętam). Więc kiedy gracz naciśnie klawisz, po prostu ustawisz zmienne fx
i fy
do czegoś i zastosujesz równanie podczas aktualizacji.
Ostatecznie musisz pomyśleć o fizyce wokół obiektów w grze - i zamiast próbować sprawić, by poruszały się tak, jak myślisz, raczej spójrz na równanie .
Przyszła uwaga: pamiętaj, że zdecydowanie nie jest to najlepszy sposób na uprawianie fizyki (nazywa się to integracją Eulera i może prowadzić do dziwnych scenariuszy przy niskiej liczbie klatek na sekundę) - musisz spojrzeć na inne sposoby robienia rzeczy (ten artykuł ma dość niezły napis na podstawach). Jednak na razie trzymaj się Euler Integration, ponieważ oznacza to, że próbujesz nauczyć się jednej rzeczy mniej.
Które gry nauczyłyby Cię, jak prawidłowo myśleć?
Jak sprawdziłbyś, czy zrobiłeś wszystko poprawnie i z właściwym nastawieniem? Włóż a Sleep(10 milliseconds)
do swojej pętli gry, a wszystko powinno nadal się poruszać i reagować w ten sam sposób, co pełna szybkość klatek.
Na koniec trzymaj się z daleka od 3D (i nałóż czwartorzędy i macierze), dopóki nie będziesz mieć dużego doświadczenia w tworzeniu gier 2D. Zaryzykowałbym stwierdzenie, że wielu twórców gier tak naprawdę nie wie, jak działają Quaternions lub Matrices - ale po prostu wiedzą, jak z nich korzystać - podchodzą do nich znacznie później (lub nigdy, gry 2D są świetną zabawą i mogą być całkiem niezłe odnoszący sukcesy). Nie musisz tak naprawdę znać algebry liniowej i tak dalej, aby robić to na poziomie podstawowym (ale to naprawdę pomaga, więc idź na nocne zajęcia, jeśli możesz).
Ostatnia premia: jedna rzecz, którą zawsze powtarzał mi mój nauczyciel sztuki, to „nie rysuj tego, co myślisz, że widzisz, rysuj to, co widzisz”. To samo dotyczy tutaj „nie modeluj tego, co myślisz , że się dzieje ( object.position++
), modeluj to, co się dzieje („ object.position + = velocity * time) ”- przynajmniej do rozsądnych granic (nie modelujesz idealnie dokładnego systemu, ale tworzysz coś, co jest dobrą imitacją).