2014-02-14 6 views
6

Sagen wir, ich möchte eine Schleife oder etwas, das zum Beispiel "Mario" jede Sekunde ausgibt. Wie kann ich das machen? Ich kann nicht scheinen, irgendwelche guten Tutorien zu finden, die das überall unterrichten = PWie kann ich jede Sekunde etwas tun? [LibGDX]

+0

Wie wäre es mit http://StackOverflow.com/Questions/12908412/Print-Hello-World-Every-x-Seconds? – snrlx

+0

Verwenden Sie AsyncTask, Threads oder Dienste, wenn Sie das Beste von Android bekommen möchten. Aber wenn Sie nur "Hallo Mario" oder etwas anderes ausdrucken möchten, googeln Sie mehr. – 3yanlis1bos

Antwort

9

Sie können java.util.Timer verwenden.

new Timer().scheduleAtFixedRate(task, after, interval); 

Aufgabe ist die Methode, die Sie, nachdem ausführen wollen, ist die Zeit bis zur ersten Ausführung und Intervall ist die Zeit zwischen Ausführungen der vorgenannten Aufgabe.

+3

Es gibt auch eine Alternative ohne Zeit, indem Sie die Delta-Zeit addieren, bis sie über 1000 ist, und dann die Methode ausführen und den Timer neu setzen. (Tun Sie dies innerhalb des Render oder Akt eines Schauspielers) – BennX

20

Wie @BennX sagte, können Sie die delta Zeit, die Sie in Ihrer Rendermethode haben, zusammenfassen oder durch Aufruf von Gdx.graphics.getDeltaTime(); abrufen. Wenn es größer ist als 1 (delta ist ein float, geben Sie die Sekunden, seit das letzte Bild gezeichnet wurde), können Sie Ihre Aufgabe ausführen. Anstatt den Timer mit timer = 0; zurückzusetzen, können Sie ihn mit timer -= 1 dekrementieren, damit Ihre Aufgaben genauer ausgeführt werden. Also, wenn 1 Aufgabe nach 1.1 seconds, Ursache von wirklich große delta das nächste Mal wird es nach etwa 0.9 Sekunden ausgeführt wird. Wenn Sie die delta Zeitlösung nicht mögen, können Sie Libgdx-Timer anstelle von java.util.Timer verwenden. Ein Beispiel dafür:

Timer.schedule(new Task(){ 
       @Override 
       public void run() { 
        doWhatEverYouWant(); 
       } 
      } 
      , delay  // (delay) 
      , amtOfSec  // (seconds) 
     ); 

Dies führt die doWhatEverYouWant() Verfahren nach einer Verzögerung von delay und dann alle seconds Sekunden. Sie können ihm auch einen dritten Parameter numberOfExecutions geben und ihm mitteilen, wie oft die Aufgabe ausgeführt werden soll. Wenn Sie diesen Parameter nicht angeben, wird die Aufgabe "für immer" ausgeführt, bis sie abgebrochen wird.

5

Ich habe die TimeUtils von libgdx verwendet, um meinen Splashscreen nach 1,5 Sekunden zu ändern. Der Code war so etwas wie folgt aus:

initialize:

long startTime = 0; 

in create-Methode:

startTime = TimeUtils.nanoTime(); 

gibt den aktuellen Wert des Systemzeitgeber, in Nanosekunden.

in Aktualisierungs- oder Render-Methode:

if (TimeUtils.timeSinceNanos(startTime) > 1000000000) { 
// if time passed since the time you set startTime at is more than 1 second 

//your code here 

//also you can set the new startTime 
//so this block will execute every one second 
startTime = TimeUtils.nanoTime(); 
} 

Aus irgendeinem Grund meine Lösung elegantere mir seemes, dass die hier angebotenen :)