2015-12-27 10 views
5

Was ist eine Delta-Zeit in LIBGDX? Ich habe viele Beiträge dazu gelesen. Mein Wissen Delta Zeit ist,Was ist eine Delta-Zeit in LIBGDX

  • Der Zeitabstand zwischen früheren und aktuellen Rahmen
  • Delta-Zeit bis zu 1 seit seiner Berechnung von x Frames pro Sekunde, dh hinzufügen. (1/x des Rahmen)
  • Um die Geschwindigkeit konstant für das Spiel machen wir dt

    verwenden Wenn wir sagen, 60 * dt dann 60 Frames pro Sekunde bewegen, egal, was die Geschwindigkeit des mobilen (zum Beispiel) ist.

    Also, das ist, was ich über Delta-Zeit weiß, aber ich bekomme keine klare Sicht darüber, sei es für ein Update oder Render-Methode übergeben wir die Delta-Zeit aber wo in dem Code, den wir berechnen berechnen für pro Sekunde?

Zum Beispiel

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

wird dieser Code bewegen 2 Bilder pro Sekunde? Wenn ja, was wird der folgende Code tun?

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

so, ich brauche Antworten,

  • was der obige Code wird impliziert ??
  • Was passiert eigentlich hinter dem Code?
  • Warum machen wir das?
  • wo in diesem Code, den wir angeben, muss es x Frames pro Sekunde wie im obigen Beispiel bewegen?

    Ich kann verstehen, dass die Rendermethode die Delta-Zeit an die Update-Methode übergibt, aber ich brauche eine klare Sicht darauf. Tut mir leid, wenn die Frage dumm scheint, aber es ist wirklich schwer voranzugehen, ohne wirklich zu wissen, was passiert. Jede Hilfe wäre großartig !!

Antwort

15

Gdx.graphics.getDeltaTime() ist die Zeit zwischen dem Beginn der vorherigen und dem Beginn des aktuellen Anrufs auf render(). Es ist auch der Wert, den Sie in Ihrer Screen#render() Methode erhalten. Das ist es. Keine schwarze Magie oder so etwas. Es dauert nur die aktuelle Zeit und subtrahiert die vorherige Zeit davon. Die unit dieses Wertes ist Sekunden. Beachten Sie, dass es nicht zu einem addiert.

Wenn also die Methode zuvor aufgerufen wurde war 6:51:30.0159512 pm und die aktuelle Uhrzeit ist 6:51:30.0324858 pm dann ist der Unterschied 0.0165346 seconds.

Geschwindigkeit (Geschwindigkeit) wird in "Einheiten" pro Sekunde gemessen, zum Beispiel meter per second oder kurz: m/s. Wenn Ihr Auto unter 360 m/s fährt und die verstrichene Zeit 0.0165346 s ist, dann ist die Entfernung, die Sie in dieser Zeit zurückgelegt haben, 0.0165346*360 s*m/s =>5.952456 m, also fast 6 Meter.

Beachten Sie, dass dies grundlegende Physik ist, ist es nicht spezifisch für libGDX. Wenn Sie es schwer zu verstehen, dann möchten Sie vielleicht auf velocity lesen.

Um Ihre unteren Fragen zu beantworten, die ich denke über Splitting Ihre Render-Methode in eine separate Update-Methode.

  • Der Code impliziert
  • etwas nicht
  • nichts hinter dem Code Es wird
  • Mit gut definierten kurzen Methoden in der Regel eine gute Praxis ist, lesen Sie: separation of concerns
  • Keine Ahnung, was Sie mit „Rahmen“ bedeuten aber die Geschwindigkeit wird mit der Zeit multipliziert mit get die Entfernung
+0

Danke, aber können Sie mir bitte sagen, warum wir diese Zeitdifferenz (Deltazeit) an die Update-Methode weitergeben? Warum ist es nützlich? Ich habe die Erklärung für mein erstes Beispiel verstanden, aber warum tun wir das für das zweite Beispiel? Was versucht es zu enthüllen, wenn wir die Delta-Zeit übergeben, um die Methode zu aktualisieren? Wie ist es nützlich @ Xoppa – Anusha

+0

Sie fragen also, warum Sie ein Delta-Zeit-Argument in Ihrer Update-Methode haben? Das ist eine Methode, die Sie erstellt haben, sie ist nicht Teil von libGDX, Sie müssen es nicht so machen. Aber normalerweise möchten Sie die Aktualisierung Ihres Spiels von der Wiedergabe trennen (siehe meinen letzten Link). Aktualisieren Ihres Spiels beinhaltet, z. Stellen Sie das Auto an seinem neuen Standort ein und benötigt daher die Delta-Zeit, um die zurückgelegte Strecke zu kennen. Es ist nützlich, weil es einfacher zu lesen und zu warten ist. Sie können den Inhalt Ihrer Aktualisierungsmethode sicher in Ihre Rendermethode verschieben. Abgesehen von diesem letzten Link möchten Sie vielleicht auch auf OOP nachlesen. – Xoppa

1

Es ist einfacher als Sie machen es zu sein. Die Delta-Zeit gibt an, wie viele Sekunden seit dem letzten Render-Aufruf verstrichen sind. Seit displacement = velocity * time multiplizieren Sie die Geschwindigkeit eines Objekts mit Delta-Zeit, um zu ermitteln, wie weit es sich seit dem letzten Render-Aufruf bewegt hat. Die Geschwindigkeit ist in Einheiten pro Sekunde. Es kann eine Konstante in Ihrem Code sein oder etwas, das Sie berechnen, wenn es von der Beschleunigung betroffen ist. Die Distanzeinheiten, die Sie verwenden, liegen bei Ihnen. Sie können Meter, Pixel (keine gute Idee, da verschiedene Geräte unterschiedliche Bildschirmabmessungen haben) oder eine andere beliebige Distanzeinheit sein.

Es macht keinen Sinn zu sagen, dass die Delta-Zeit zu eins addiert. Es ist nichts weiter als die Anzahl der Sekunden seit dem letzten Frame (also normalerweise viel weniger als 1.0).

Es macht auch keinen Sinn zu sagen, dass Sie etwas in Frames pro Sekunde verschieben möchten. Sie möchten etwas Entfernungseinheiten pro Sekunde verschieben.

Ihr erstes Codebeispiel ist nicht kompilierbar. Aber wenn Sie so etwas wie

myObject.position.x += 5*dt; 
schreiben waren

Dies würde bedeuten, Ihr Objekt pro Sekunde horizontal bei 5 Entfernungseinheiten bewegt und so werden Sie seine horizontale Position Aktualisierung entsprechend.