2014-03-06 137 views
1

我剛剛寫了一些小遊戲,問題在於,每次我在遊戲過程中鎖定屏幕並在解鎖之後,遊戲就會凍結。我不知道爲什麼但它發生。當屏幕被鎖定並解鎖時,遊戲會凍結

現在我想知道哪種方法,我必須改變設置遊戲暫停或恢復當屏幕被鎖定。

有沒有像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(); 
     } 

先手叫上家按下並鎖定屏幕時,重新進入比賽,但,再解鎖它時, 。這就是線程無法啓動的原因。

現在我想知道如何手動調用此方法?

+0

當遊戲結冰時添加任何logcat。你怎麼畫? Canvas或OpenGL以及如何處理暫停/恢復。 –

+0

沒有logcat!這是奇怪的部分。在SurfaceView的畫布上繪製,這就是遊戲線程的作用。 – user2410644

回答

1

你應該可以使用onPause()和onResume()。查看活動生命週期以獲取更多信息。

+0

onResume()和onPause()適用於我,但只有當按下主頁按鈕並重新進入應用程序 – user2410644

+0

@ user2410644 - 我認爲我們需要更多關於您使用的框架的信息。它是用純Android編寫還是使用庫來處理事情? – OrhanC1

+0

純粹的Android,要添加一些信息到我原來的帖子 – user2410644