2014-01-28 37 views
1

這個Android遊戲開發的新品牌,我目前正在嘗試創建一個平臺遊戲。有沒有辦法讓某些動作(如更改變量值)有幾秒鐘的延遲,而沒有延遲機制阻止其他東西?我已經試過拖延行動

new Thread(){ 
public void run(){ 
    try { 
     Thread.sleep(2000); 
     //variable value change 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
     } 
    } 
}.start(); 

我發現的方法,但它似乎像這種方法停止任何與它一起運行的背景音樂。我也嘗試了Handler的方法,但它似乎讓遊戲崩潰。我正在使用libgdx框架。

+1

會發生什麼事,當你使用一個處理程序?有一些logcats? – turbo

回答

3

你必須明白你的遊戲正在無限循環中運行。通常你會無休止地獲得你的render(float deltaTime)由LibGDX調用。

你可以要麼只是做自己這樣的:

public void render(float deltaTime) { 
    countDown -= deltaTime; 
    if (countDown <= 0) { 
     doSomething(); 
    } 
} 

或者你可以使用Timer類LibGDX,而不是像這樣:

float delay = 1; // seconds 

Timer.schedule(new Task(){ 
    @Override 
    public void run() { 
     // Do your work 
    } 
}, delay); 
-2

如果你打算做的OpenGL遊戲(我鼓勵你),你有Renderer類已建立int方法:onDrawFrame(GL10 gl),onSurfaceChanged(GL10 gl),onSurfaceCreated(GL10 gl),你感興趣的是onDrawFrame(GL10 gl)

所以,你的類擴展渲染的模板應該是這樣的:

public class CustomRenderer extends Renderer { 
    @Override 
    public void onDrawFrame(GL10 gl) { 
     try { 
      Thread.sleep((float)(1000/60)); // 1000 milliseconds divided by 60 so you get 60fps 
      //Your code here 
     } 
     catch(InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
    @Override 
    public void onSurfaceChanged(GL10 gl) { 
     //Your code here 
    } 
    @Override 
    public void onSurfaceCreater(GL10 gl) { 
     //Your code here 
    } 
} 
+0

雖然在你的答案很好的信息。這並沒有真正回答OP的問題。 – Lestat

+0

那麼它確實提供了重複調用方法的延遲。但是,由於OP要求執行/更改特定的操作/變量,因此您的批評可能被認爲是正確的。 – NitroNbg

+0

我不明白這有什麼幫助。首先:這裏有一個libgdx標記,它是一個跨平臺框架,它也是opengl的一個包裝。所以這裏不能使用。此外,你的代碼沒有任何意義,因爲你把線程在16.6毫秒睡眠在每個幀,這完全是無稽之談...... – noone