2015-12-27 14 views
5

Che cos'è un tempo Delta in LIBGDX? Ho letto molti post su questo. A mia conoscenza, tempo Delta è,Che cos'è un tempo Delta in LIBGDX

  • L'intervallo di tempo tra trama precedente e corrente
  • tempo delta aggiungerà fino 1 dal suo calcolo di fotogrammi x al secondo esempio. (1/x dei telai)
  • per rendere la velocità costante per il gioco che usiamo dt

    Se diciamo 60 * dt poi si sposterà a 60 fotogrammi al secondo, non importa quale sia il cellulare (per esempio) è la velocità del.

    Quindi, questo è quello che so delta time ma non riesco a ottenere una chiara visione a riguardo perché, sia per un aggiornamento o un metodo di rendering stiamo passando il delta time ma dove nel codice stiamo specificando per calcolare per PER SECONDO?

Per esempio,

public void update(float dt) 
    { 
     float distance +=2*dt; 
    } 

sarà questo codice mossa 2 fotogrammi al secondo? Se sì, allora cosa farà il codice seguente?

public void update(float dt) 
    { 
     .... 
    } 
    public void render(float delta) 
    { 
     update(delta); 
    } 

così, ho bisogno di risposte per,

  • ciò che il codice di cui sopra è che implica ??
  • Cosa sta effettivamente accadendo dietro il codice?
  • Perché lo stiamo facendo?
  • dove in questo codice si specifica che deve spostare x fotogrammi al secondo come nell'esempio precedente precedente?

    Posso capire che il metodo di rendering sta passando il delta time al metodo di aggiornamento ma ho bisogno di una visione chiara al riguardo. Scusate se la domanda sembra stupida ma è davvero difficile procedere senza sapere realmente cosa sta succedendo. Qualsiasi aiuto sarebbe fantastico !!

risposta

15

Gdx.graphics.getDeltaTime() è il tempo che intercorre tra l'inizio del precedente e l'inizio della chiamata corrente a render(). È anche il valore che ottieni nel tuo metodo Screen#render(). Questo è tutto. Nessuna magia nera o qualcosa del genere. Prende solo il tempo corrente e sottrae la precedente volta da esso. Lo unit di questo valore è secondi. Si noti che non si aggiunge a uno.

Quindi se la chiamata precedente è stata effettuata con il metodo 6:51:30.0159512 pm e l'ora corrente è chiamata 6:51:30.0324858 pm, la differenza è 0.0165346 seconds.

Velocità (velocità) viene misurata in "unità" al secondo, ad esempio meter per second o breve: m/s. Se la tua auto viaggia a 360 m/s e il tempo trascorso è 0.0165346 s, allora la distanza che hai percorso in quel momento è 0.0165346*360 s*m/s =>5.952456 m, quindi quasi 6 metri.

Si noti che questa è fisica di base, non è specifica per libGDX. Se lo trovi difficile da capire, potresti leggere il velocity.

Per rispondere alle vostre domande di fondo, che presumibilmente riguardano la suddivisione del metodo di rendering in un metodo di aggiornamento separato.

  • Il codice non è che implica nulla
  • Non c'è niente dietro il codice
  • Utilizzando metodi brevi ben definiti di solito è una buona pratica, leggere: separation of concerns
  • idea di cosa si intende per "frame" ma la velocità viene moltiplicata per il tempo a per ottenere la distanza
+0

Grazie, ma puoi dirmi perché stiamo passando questa differenza di orario (delta time) al metodo di aggiornamento? Perché è utile? Ho capito la spiegazione del mio primo esempio, ma perché lo stiamo facendo per il secondo esempio? Cosa sta cercando di rivelare quando passiamo delta time per aggiornare il metodo? Com'è utile @Xoppa – Anusha

+0

Quindi stai chiedendo perché hai un argomento delta del tempo nel tuo metodo di aggiornamento? Questo è un metodo che hai creato, non fa parte di libGDX, non devi farlo in quel modo. Ma di solito vuoi separare l'aggiornamento del tuo gioco dal renderlo (vedi il mio ultimo link). L'aggiornamento del gioco comporta, ad es. ponendo l'auto nella sua nuova posizione e quindi ha bisogno del tempo di delta per conoscere la distanza percorsa. È utile perché è più facile da leggere e conservare. È possibile spostare in sicurezza il contenuto del metodo di aggiornamento nel metodo di rendering. Oltre a quest'ultimo link, potresti anche voler leggere su OOP. – Xoppa

1

È più semplice di quello che stai facendo per essere. Il tempo delta indica quanti secondi sono trascorsi dall'ultima chiamata di rendering. Dal displacement = velocity * time moltiplichi la velocità di un oggetto per delta time per ottenere quanto è stato spostato dall'ultima chiamata di rendering. La velocità è espressa in unità al secondo. Può essere una costante nel codice o qualcosa che si calcola se è influenzata dall'accelerazione. Le unità di distanza che usi dipendono da te. Possono essere metri, pixel (non è una buona idea dato che i vari dispositivi hanno dimensioni dello schermo diverse) o qualche altra unità di distanza arbitraria.

Non ha senso dire che il tempo di delta si somma a uno. Non è altro che il numero di secondi dall'ultimo fotogramma (quindi di solito è molto inferiore a 1,0).

Non ha senso dire che si desidera spostare qualcosa in fotogrammi al secondo. Vuoi muovere qualcosa di unità di misura al secondo.

Il tuo primo esempio di codice non è compilabile. Ma se si dovesse scrivere qualcosa di simile

myObject.position.x += 5*dt; 

Questo significherebbe l'oggetto si muove orizzontalmente a 5 unità di distanza al secondo e così si sta aggiornando la sua posizione orizzontale di conseguenza.