나는이 tutorial을 기반으로 게임을 개발 중입니다. 나는 대부분의 게임을 작동시킬 수 있었지만 사용자가 홈 버튼을 누르면 내 게임은 백그라운드에서 계속 실행되며 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()를 보호 방법을 만드는
아니요. 도움이되지 않았습니다. onResume 또는 다른 Overriden 메서드에 여전히 도달하지 않습니다. 코드가 지금과 같은 방식으로 내 대답을 편집했습니다. – caiocpricci2
'super.onResume(); 앞에는 여전히 'panel.pauseGame (false);'가 있습니다. Home이 실행될 때 Android Activity Lifecycle은 onPause()에 도달해야합니다 (돌아 오기 전에 기다리는 시간에 따라 더 멀어 질 수도 있음). 다시 돌아 오면 실행을 계속하기 위해 onResume()을 통과해야합니다 .. super.onResume()은 메소드가 정상적으로 수행 할 작업을 포함하기 위해 포함됩니다.이 작업을 무시하지 않으면 수행 할 작업입니다. 이것이 정상적으로 수행되는 첫 번째 작업으로 포함 된 이유입니다. – DizzyThermal
pauseGame의 유무와 상관없이 여전히 아무것도 변경하지 않습니다. 로그는 나에게 onResume, onRestart, onStart, 아무것도주지 않습니다. 집에 돌아온 후에 다시 돌아 오면 아무 방법도 호출되지 않습니다. 그리고 나는 왜 그런지 이해하지 못합니다. – caiocpricci2