首页 文章

在stateView类中暂停和恢复android线程

提问于
浏览
0

我正在实现一个Android游戏,并在暂停和恢复线程时遇到问题 . 这是`package com.andromeda.bubbleshooter;

import android.graphics.Canvas; import android.view.SurfaceHolder;

公共类MainThread扩展Thread {

// flag to hold game state
private boolean running;
public static boolean stop;

private SurfaceHolder surfaceHolder;
public GameLoop gamePanel;

public MainThread(SurfaceHolder surfaceHolder, GameLoop gamePanel) {
    super();
    this.surfaceHolder = surfaceHolder;
    this.gamePanel = gamePanel;
}

public void setRunning(boolean running) {
    this.running = running;
}

@Override
public void run() {
    Canvas canvas = null;
    while (running) {

        // update game state
        // render state to the screen
        try {
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) {
                // if (running)
                gamePanel.draw(canvas);
            }
        } finally {
            // in case of an exception the surface is not left in
            // an inconsistent state
            if (canvas != null) {
                surfaceHolder.unlockCanvasAndPost(canvas);
            }
        } // end finally

    }
}

}

在扩展surfaceView的Game循环类中,我正在构造函数中初始化线程,当单击暂停按钮时,我调用.setRunning(false),并在恢复时调用.setRunning(true) . 暂停游戏时可以,但是当点击按钮恢复时,没有任何变化,游戏也会被冻结 .

1 回答

  • 0

    这是因为当你在暂停时将isRunning设置为false时,退出while循环并离开run函数,这会导致线程结束 . 您应该提供其他形式的同步,而不是设置isRunning . 一种方法是拥有一张单票的信号量 . 你可以把它放在pause()中并在resume()中释放它,然后在每次运行开始时通过主线程循环释放它 . 这样,如果你暂停,你会等待信号量被释放后才能再次运行 .

相关问题