2014-02-14 55 views
6

可以說我想做一個循環或打印出來的東西,例如,「Mario」每秒。我怎樣才能做到這一點?似乎無法找到任何教導任何地方的好教程= P我怎樣才能每秒做點什麼? [LibGDX]

+0

http://stackoverflow.com/questions/12908412/print-hello-world-every-x-seconds? – snrlx

+0

如果您想獲得最好的Android,請使用AsyncTask,線程或服務。但如果你只是想打印出「你好馬里奧」或其他東西,谷歌更多。 – 3yanlis1bos

回答

9

您可以使用java.util.Timer。

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

任務是要執行的方法,之後的時間,直到第一次執行的數量和間隔是上述任務的執行之間的時間。

+3

還有一個沒有時間的替代方法,就是總結達到1000以上的增量時間,然後執行該方法,並重新設置定時器。 (在演員或演員的行爲中這樣做) – BennX

20

由於@BennX表示你可以總結你在渲染方法中的delta時間或通過調用Gdx.graphics.getDeltaTime();得到它。如果它大於1deltafloat,給出自上一幀繪製以來的秒數),則可以執行您的任務。通過使用timer = 0;來重置定時器,而不是使用timer -= 1來減少定時器,從而使您的任務得到更準確的執行。所以如果1個任務開始後1.1 seconds,原因真的delta下一次它被執行後大約0.9秒。 如果您不喜歡delta時間解決方案,則可以使用Libgdx計時器,而不是java.util.Timer。 An的它例如:

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

一個延遲的delay和每seconds然後這之後執行doWhatEverYouWant()方法。您也可以給它一個第三個參數numberOfExecutions,告訴它應該執行任務的頻率。如果你不給這個參數,這個任務將被永久執行,直到它被取消。

5

我使用了libgdx的TimeUtils在1.5秒後更改了我的splashscreen。該代碼是這樣的:

初始化:

long startTime = 0; 

在創建方法:

startTime = TimeUtils.nanoTime(); 

返回系統計時器的當前值,在納秒。

在更新或渲染方法:

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(); 
} 

出於某種原因,我的解決方案seemes更優雅,我認爲那些在這裏:)

提供