2016-06-28 2 views
0

게임 개발에 관한이 튜토리얼을 수행 중이며 조금 혼란 스럽습니다.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에이 방법을 알지 못합니다.

+0

'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)) –

+0

이 코드는 resume()에 있습니다. GameView의 방법. GameView 인스턴스 생성시 해당 메서드가 호출 되었습니까? – Nirri

+1

게임보기를 다시 시작할 때 호출됩니다. 이것은 뷰가 디스플레이되고 "활성화 된"후에해야한다. 그래서 게임'Thread' 인스턴스는 렌더링을 위해 유효하지 않을 때'SurfaceView'를 조작하려고하지 않는다. 나머지 코드가 보이지 않으면 활동 라이프 사이클 (예 :'Activity.onResume') 및/또는 게임 시작/일시 중지/다시 시작 메뉴 항목에서 발생합니다. –

답변

1

pause() 활동이 재개되지 않으면 호출되지 않습니다. 그래서이 방법이 좋습니다. 매번 pause()은 gameThread가 null이 아니므로 호출됩니다.

+0

나는 활동주기를 조사 했어야했다. 감사! – Nirri