2014-01-28 107 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