게임 개발에 관한이 튜토리얼을 수행 중이며 조금 혼란 스럽습니다.Android SurfaceView 현재 스레드 참조
자습서에서는 Runnable을 구현하는 SurfaceView를 확장하는 클래스가 기본 게임 콘텐츠보기를 관리하기 위해 만들어집니다. 코드가 완벽하게 작동 - 오해하지 마십시오
public class GameView extends SurfaceView implements Runnable {
Thread gameThread = null;
private boolean playing;
public TDView(Context context) {
super(context);
// other game logic
}
public void pause() {
playing = false;
try {
gameThread.join();
} catch (InterruptedException e) {
}
}
public void resume() {
playing = true;
gameThread = new Thread(this);
gameThread.start();
}
@Override
public void run() {
while (playing) {
update();
draw();
control();
}
}
}
: 다음과 같은
public class MainActivity extends Activity {
private GameView gameView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
}
@Override
protected void onPause() {
super.onPause();
gameView.pause();
}
@Override
protected void onResume() {
super.onResume();
gameView.resume();
}
}
서피스 뷰 SurfaceView 클래스는 정의된다 : 표면의보기는 다음과 같은 주요 활동의 내용보기로 설정 하지만 에 대해 혼란 스럽습니다. gameThread 변수는 어디에서 인스턴스화됩니까? resume 메서드 외에도 내 프로젝트의 아무 곳에서나 코드 행이 나타나지 않습니다. GameView 인스턴스 생성시 재개 메소드가 호출 되었습니까? 아니면 누락 된 것이 있습니까?
바보 같은 질문이라면 실례지만, Google에이 방법을 알지 못합니다.
'gameThread = new Thread (this); '에서 Thread의 생성자에 전달 된 Runnable 구현과'gameThread.start()'는 덮어 쓰기 된 run() 메소드를 실행합니다. [link] (https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#Thread (java.lang.Runnable)) –
이 코드는 resume()에 있습니다. GameView의 방법. GameView 인스턴스 생성시 해당 메서드가 호출 되었습니까? – Nirri
게임보기를 다시 시작할 때 호출됩니다. 이것은 뷰가 디스플레이되고 "활성화 된"후에해야한다. 그래서 게임'Thread' 인스턴스는 렌더링을 위해 유효하지 않을 때'SurfaceView'를 조작하려고하지 않는다. 나머지 코드가 보이지 않으면 활동 라이프 사이클 (예 :'Activity.onResume') 및/또는 게임 시작/일시 중지/다시 시작 메뉴 항목에서 발생합니다. –