有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java延迟动作

我是这个Android游戏开发的新手,目前我正在尝试创建一个平台游戏。有没有一种方法可以使某些操作(例如更改变量值)有几秒钟的延迟,而不让延迟机制停止其他所有操作?我已经试过了

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

我找到的方法,但这个方法似乎停止了任何与它一起运行的背景音乐。我也尝试过Handler方法,但它似乎使游戏崩溃。我正在使用libgdx框架


共 (2) 个答案

  1. # 1 楼答案

    你必须明白你的游戏是在无休止的循环中运行的。通常,LibGDX会无休止地调用render(float deltaTime)

    你可以自己这样做:

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

    或者您可以使用LibGDX的^{}类,如下所示:

    float delay = 1; // seconds
    
    Timer.schedule(new Task(){
        @Override
        public void run() {
            // Do your work
        }
    }, delay);
    
  2. # 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
        }
    }