我剛剛寫了一些小遊戲,問題在於,每次我在遊戲過程中鎖定屏幕並在解鎖之後,遊戲就會凍結。我不知道爲什麼但它發生。當屏幕被鎖定並解鎖時,遊戲會凍結
現在我想知道哪種方法,我必須改變設置遊戲暫停或恢復當屏幕被鎖定。
有沒有像onScreenLocked()或onScreenWake()方法?
我有三個班,mainactivity,增加了一個gameview它自己的觀點。這個遊戲視圖得到了一個gamethread,它不斷更新遊戲視圖本身。
現在,當onPause()在mainactivity上被調用時,它會調用gameView.pause();方法。
這就是這種方法(gameview.pause()):
public void pause() {
isPaused = true;
gameThread.pause();
}
當isPaused得到= TRUE遊戲不斷更新
。如果不是,那麼它不會。當mainActivity上的onResume()被調用時,gameView.resume();方法被調用,看起來像這樣:
public void resume() {
gameThread = new GameThread(this);
gameThread.startThread();
isPaused = false;
}
是的,就是這樣。 現在當遊戲過程中按下home鍵時,它會暫停,當重新進入遊戲時,它會持續到最後。
但是,當按下鎖定按鈕,然後解鎖屏幕,我只是看到遊戲凍結,我不知道爲什麼。
我發現遊戲線程在解鎖屏幕時不再運行。我不知道如何解決它,加入一些
gameThread.start();
遊戲會崩潰時,因爲。 但是爲什麼在鎖定屏幕時線程停止工作,但在離開遊戲並重新進入時工作得很好?
編輯:
我剛剛發現我的問題。我gameView代碼看起來就像這樣:
public class GameView extends SurfaceView implements OnGestureListener{
public GameView(Context context, Activity activity) {
super(context);
gameThread = new GameThread(this);
init();
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
gameThread.setRunning(true);
gameThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
});
}
public void init() {
}
public void update() {
}
public void draw(Canvas canvas) {
super.draw(canvas);
}
public void pause() {
isPaused = true;
gameThread.setRunning(false);
}
public void resume() {
gameThread = new GameThread(this);
gameThread.startThread();
}
}
我發現了
public void surfaceCreated(SurfaceHolder holder) {
gameThread.setRunning(true);
gameThread.start();
}
先手叫上家按下並鎖定屏幕時,重新進入比賽,但不,再解鎖它時, 。這就是線程無法啓動的原因。
現在我想知道如何手動調用此方法?
當遊戲結冰時添加任何logcat。你怎麼畫? Canvas或OpenGL以及如何處理暫停/恢復。 –
沒有logcat!這是奇怪的部分。在SurfaceView的畫布上繪製,這就是遊戲線程的作用。 – user2410644