我正在开发基于此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