在击中键后,Android游戏不会启动(重启)

时间:2013-03-20 22:22:21

标签: android restart android-homebutton

我在点击主页或在Android上返回按钮后重启我的游戏时遇到问题。

我在线程中找到了部分解决方案:  Android crash when app is closed and reopened,但重启后的游戏无法正常运行。 它只显示同样移动的图像/精灵,但不会读取触摸。

//这是游戏视图

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) { // ce se spremeni zaslon

}

public void surfaceCreated(SurfaceHolder holder) {

    createSprites();
    start();

}

public void start() {
    loop.setRunning(true);
    if (!mGameIsRunning) {
        loop.start();

        mGameIsRunning = true;
    } else {
        loop.onResume();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    while (retry) {
        try {
            loop.join();
            retry = false;

        } catch (InterruptedException e) {
        }
    }
}

//这是游戏线程

    while (running) {
        canvas = null;
        try{
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) {
                beginTime = System.currentTimeMillis();
                framesSkipped = 0;
                this.gameView.update();
                this.gameView.render(canvas);
                synchronized (mPauseLock) {
                    while (mPaused) {
                        try {
                            mPauseLock.wait();
                        } catch (InterruptedException e) {
                        }
                    }
                }
                timeDiff = System.currentTimeMillis() - beginTime;
                sleepTime = (int)(FRAME_PERIOD - timeDiff);

                if (sleepTime > 0){
                    try{
                        Thread.sleep(sleepTime);                        
                    } catch (InterruptedException e) {
                    }
                }
            }
        } finally {
            if (canvas != null){
                surfaceHolder.unlockCanvasAndPost(canvas);
            }

        }
    }
}
public void onPause() {
    synchronized (mPauseLock) {
        mPaused = true;
    }
}

public void onResume() {
    synchronized (mPauseLock) {
        mPaused = false;
        mPauseLock.notifyAll();
    }
}

任何人都可以告诉我是否有任何错误或任何其他解决方案。

感谢您的帮助。

或者,如果有人能告诉我一个停止游戏并重新开始游戏的好方法,那么?

我修好它以便在我回家时它起作用,但是当我回击并重新启动它时,我会出现黑屏。

//当前的游戏视图代码

public void surfaceCreated(SurfaceHolder holder) {
    if (loop==null)
        loop = new GameLoop(getHolder(), this);
     if(loop.getState() == Thread.State.TERMINATED)
     {
         loop = new GameLoop(getHolder(), this);
     }   

    start();

}

public void start() {
    if (!mGameIsRunning) {
        mGameIsRunning = true;
        loop.setRunning(true);
        loop.start();

    } else {
        loop.onResume();
        loop.start();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    loop.onPause(); 
}

我觉得这个问题出现在surfaceDestroy方法中,但我不确定,因为我不知道回家或后退键有什么区别。

0 个答案:

没有答案