Bardzo mało wiem o programowaniu gier, ale chciałbym dowiedzieć się więcej. Próbuję zrozumieć kod tej gry. Próbuję zrozumieć, dlaczego kod przekazuje „deltę” do Shipcontrols.js, która zmienia kierunek statku na podstawie danych wprowadzonych przez użytkownika.
Zasadniczo gra oblicza „deltę” w każdej pętli ...
Oto skrócona wersja stosu, która wykorzystuje deltę przez jedną pętlę ...
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
Wchodzi tutaj ...
ctx.manager.add("game", scene, camera, function(delta, renderer)
{
if(delta > 25 && this.objects.lowFPS < 1000) this.objects.lowFPS++;
var dt = delta/16.6;
this.objects.components.shipControls.update(dt);
Wchodzi tutaj ...
bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){
Co robi takie rzeczy ...
if(this.key.forward)
this.speed += this.thrust * dt;
else
i to...
if(this.key.right)
{
angularAmount -= this.angularSpeed * dt;
Jaki jest sens delty tutaj? Czy to tylko próba wprowadzenia elementu losowości? Kod tej gry jest bardzo dobry. Dlaczego ten facet użył delty?
physics
game-loop
control
motion-control
bernie2436
źródło
źródło
Odpowiedzi:
To jest „delta czasu”. To ile czasu minęło od poprzedniej aktualizacji. Konieczne jest upewnienie się, że animacje, fizyka itd. Działają z odpowiednią prędkością.
Kod jest uruchamiany raz na aktualizację ramki. Nie ma jednak gwarancji, że ramki są rysowane ze stałą prędkością. Jedna klatka może zająć 1/60 sekundy, a następna 1/30. Jeśli nie zmierzysz tego i nie weźmiesz pod uwagę, gra będzie roztrzęsiona i będzie działać albo zbyt szybko, albo zbyt wolno w różnych okolicznościach.
Delty czasowe są często stosowane w fizyce, ponieważ w ten sposób określane są równania dla prostych integracji Eulera. Zintegrowanie prędkości z pozycją jest zdefiniowane jako
x1 = x0 + v * (t1 - t0)
upraszczające kodx += v * dt
. Dlatego do oceny aktualizacji fizyki wymagane są delty czasowe.To bardzo, bardzo normalne, aby mierzyć i stosować delty czasowe.
źródło
„Delta”, „d” lub „Δ” oznacza „różnicę” w kontekście matematycznym . Ilekroć występuje różnica między dwiema liczbami o podobnych znaczeniach, różnicę tę można nazwać „deltą” lub „d”.
Delty są bardzo powszechne w tworzeniu gier. Na przykład, różnica między znakiem X jest współrzędną jedną sekundą a jego współrzędnej x można teraz nazywana „PPO” i jest powszechnie określane jako
dx
,delta_x
lubd_x
.Często zdarza się, że różnica występuje dwa razy, tak jak w kodzie:
W tym przypadku ta zmienna oznacza różnicę między czasem przechowywanym w
this.time
, a czasem przechowywanym wnow
.Delty są powszechnie używane do przedstawienia zmiany czegoś w czasie. Na przykład, jeśli wiesz, że współrzędna X gracza powinna zmieniać 5 pikseli w każdej klatce, możesz zapisać tę zmianę jako różnicę:
A następnie użyj tej delty, aby zastosować zmianę, gdy jej potrzebujesz:
Pamiętaj jednak, że to tylko konwencja. Nikt nie zmusza cię do nazwania twoich zmiennych „delta” lub „d”, ale może to pomóc komuś, kto czyta twój kod, lub tobie, jeśli przeczytasz go w przyszłości, w zrozumieniu, co ma robić zmienna.
Inne popularne litery greckie szeroko stosowane w programowaniu to:
Epsilon : za bardzo małą wartość. Często używane podczas porównywania zmiennoprzecinkowych lub innych zmiennych z problemami z precyzją:
Pi : dla stałej tytułowej
Theta : do reprezentowania kątów
Lambda : do reprezentowania anonimowych funkcji lub zamknięć
źródło
dt
oznaczadelta time
. Służy do obliczania liczby klatek na sekundę, aby zapewnić, że gra działa z tą samą prędkością, bez względu na częstotliwość klatek.Więcej informacji na
framerate independence
ten temat można znaleźć tutaj .źródło
dt (czas delta) to czas między każdym cyklem renderowania (lub dowolnym znacznikiem czasu) pętli. Dzięki temu czasowi delty możemy rozciągać określone wartości w czasie. Podobnie jak w prawdziwym świecie, mierzymy pewne właściwości fizyki w czasie.
Powiedzmy, że uruchamiamy naszą grę 60 klatek na sekundę. Jeśli chcemy, aby nasz odtwarzacz poruszał się o 5 pikseli na sekundę, robimy to
lub
Postać porusza się o 5 pikseli na 60 klatkach. Im dłużej trwa cykl, tym większy będzie czas delty.
Dla każdej liczby klatek na sekundę (1/30, 1/25 itd.) Wynik będzie taki sam.
źródło