Java 如何暂停和恢复GameLoop?

Java 如何暂停和恢复GameLoop?,java,android,surfaceview,resume,game-loop,Java,Android,Surfaceview,Resume,Game Loop,暂停后我无法恢复比赛。我正在使用SurfaceView,下面是代码中最重要的部分: void pause() { if (!pause) { gameLoopThread.setRunning(false); pause = !pause; System.out.println("pause"); } else { gameLoopThread.setRunning(true); System

暂停后我无法恢复比赛。我正在使用SurfaceView,下面是代码中最重要的部分:

void pause() {
    if (!pause) {
        gameLoopThread.setRunning(false);
        pause = !pause;
        System.out.println("pause");
    }
    else {
        gameLoopThread.setRunning(true);
        System.out.println("end pause");
        pause = !pause;
    }
}

public GameView(Context context) {
    super(context);
    gameLoopThread = new GameLoopThread(this);

    getHolder().addCallback(new SurfaceHolder.Callback() {

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            gameLoopThread.setRunning(false);

            while (retry) {
                try {
                    gameLoopThread.join();
                    retry = false;
                } catch (InterruptedException e) {}
            }
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            //createSprites();

            gameLoopThread.setRunning(true);
            gameLoopThread.start();
            thread1.start();
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format,
                                    int width, int height)
        {
        }

当我第一次使用“暂停”时,游戏将停止,但当我尝试第二次使用“暂停”恢复游戏时,它不起作用,但我在日志中打印了“结束暂停”。

通常情况下,你不会暂停整个线程以暂停游戏。当您更新时,渲染通常应该有任何类型的增量时间对象,您应该为您的增量时间对象实现一个新组件,称为类似时间刻度的东西。时间刻度只是将时间增量自身叠加,以返回修改后的增量时间。所以现在如果你想暂停你的游戏,只需将时间刻度设置为0,你就什么都不做了,你仍然可以运行更新、渲染队列来修改东西、动画或其他任何东西

另一种方法可以是,给每个实体(比如在基本实体中)一个暂停属性。然后你通过你的实体发送一条消息,比如pausegame,并且paused属性get被设置为true。在ur基本实体的虚拟更新中,只需检查暂停和if set return


第二个是更高级的一个,与第一个相比有一些支撑优势,但如果它存在的话,至少需要一个良好的实体/组件概念设计。

我想GameLoopThread是从Thread继承的自定义类。你能给我们看一下这个类中用于暂停的代码吗?你看过堆栈跟踪以查看线程状态吗?