私はこのtutorialに基づいてゲームを開発しています。 私はほとんどのゲームを動作させることができましたが、ユーザーがホームボタンを押したときに、ゲームはバックグラウンドで実行され続けます。また、onPauseメソッドを使用してゲームを一時停止できます。ホームボタンを押した後、SurfaceViewにフォーカスを失う
ユーザーがゲームを再開すると、どのメソッドも呼び出されず、パネルのフォーカスが失われます。
ホームボタンを押した後、ゲームがバックグラウンドに送信された後、再びフォーカスを得ることができますか?
My活動コード:
@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...");
}
Myパネルコンストラクタ:
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(true)を呼び出す必要が理解されるようにもう一度、どこで?
編集:DizzyThermalからの提案の後、私は一時停止メソッドを削除し、ログだけを残して、なぜそれがonResume()メソッドに到達しないのかわかりません!
いいえ..役に立たなかった。 onResumeやその他のOverridenメソッドにはまだ到達していません。私は、コードが今のところどのようになっているか、私の答えを編集しました。 – caiocpricci2
'super.onResume();の前にまだ' panel.pauseGame(false); 'があります。ホームがヒットしたときにAndroidアクティビティライフサイクルがonPause()に到達する必要がありますそれを元に戻すには、onResume()を実行して実行を続行する必要があります。super.onResume()は、メソッドが通常どおりに行うようにするために含まれています。これをオーバーライドしなかった場合の処理です。これが通常行われる最初のものとして通常含まれている理由です。 – DizzyThermal
pauseGameの有無にかかわらず、何も変更されませんが、ログはまだ私にonResume、onRestart、onStart、何も与えません。私が帰宅した後に帰った後、どの方法も呼ばれません。そして、なぜ私は理解していない。 – caiocpricci2