我正在開發基於此tutorial的遊戲。 我設法使遊戲的大部分工作,但是當用戶按下home按鈕時,我的遊戲繼續在後臺運行,我可以使用onPause方法暫停它,除了它之外的所有東西都不會運行onResume方法。按下主屏幕按鈕後失去對SurfaceView的注意力
當用戶重新開始遊戲時,沒有任何方法被調用,並且我的面板失去了焦點。
在按下主頁按鈕後,如何讓遊戲在發送到後臺後再次獲得焦點?
我的活動代碼:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
panel = new Panel(this);
// requesting to turn the title OFF
requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
// set our MainGamePanel as the View
setContentView(panel);
Log.d(TAG, "onCreate");
}
@Override
public void onStart(){
super.onStart();
Log.d(TAG,"onStart");
}
@Override
public void onRestart(){
super.onRestart();
Log.d(TAG,"onRestart");
}
@Override
public void onResume(){
super.onResume();
Log.d(TAG, "onResume");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Log.d(TAG, "onSaveInstance");
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(TAG, "onRestoreInstance");
}
@Override
public void onPause(){
super.onPause();
Log.d(TAG,"onpause");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop..");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy...");
}
我的面板構造:
WhackEmPanel(Context c) {
super(c);
this.context=c;
loadAnimations();
setCharacters();
getHolder().addCallback(this);
backGround = BitmapFactory.decodeResource(getResources(), R.drawable.background);
// create the game loop thread
thread = new MainThread(getHolder(),this);
setFocusable(true);
//Generate Random Numbers for characters
Picker = RandomPicker.RandomPick(8,500); //From 0 to 8, gives me 500 random integers
picked=Picker.remove(0);
}
我是新來這個遊戲節目的事情,但據我瞭解,我需要調用setFocusable(真)再次,但在哪裏?
編輯:從DizzyThermal的建議後,我刪除了暫停方法,只留下日誌,我不明白爲什麼它永遠不會到達onResume()方法!
不..它沒有幫助。它仍然沒有達到onResume或其他任何Overriden方法。我已經編輯了我現在的代碼的答案。 – caiocpricci2 2012-01-18 14:36:01
您仍然有'panel.pauseGame(false);''super.onResume();'之前''Android活動生命週期應該達到onPause()當Home被擊中時(可能更遠取決於您在返回之前等待多久)以及何時帶回它必須通過onResume()繼續運行..包含super.onResume()方法做它通常會做的事情..這是它會做什麼,如果你不覆蓋它。這就是爲什麼它通常作爲第一件事情被包括在內。 – DizzyThermal 2012-01-18 20:44:30
它仍然不會改變任何事情,無論是否有暫停遊戲,日誌仍然不會給我onResume,onRestart,onStart,什麼都沒有。回家後回來後,沒有任何方法被調用。我不明白爲什麼。 – caiocpricci2 2012-01-19 00:13:56