2013-06-17 5 views
0

SurfaceView을 사용하여이 작은 게임을 만들었으니 이제 화면에 게임을 보여주고 싶습니다. SurfaceView의 업데이트 및 렌더링 메소드가 다른 Thread에 의해 호출되기 때문에 XML을 통해 게임을 올바르게 팽창시키고이를 화면에 추가하는 방법을 알고 싶습니다.안드로이드 게임 화면 위로

PD : 그에서 나는 내가 활동에 대한 참조를 사용할 수 있습니다 알고, 내가

public void render() { 
    if(gameOver) { 
    View gameOverView = LayoutInflater.from(activity).inflate(R.layout.gameover); 
    // code to get the layout 
    // and finally 
    layout.addView(gameOverView); 
    } 

을 할 수 있지만, 일이 activity는 UI 스레드에서 만들어 졌는지, 그리고 render()가 호출 될 것을 의미 보조 스레드에 의해, 그래서 그것은 예외를 throw합니다.

답변

1

당신의 방법은 일을해야합니까?

+0

은'public void render() {if (gameover) activity.showGameOverScreen();을 호출하는 것보다 낫습니다. ...... "? 'showGameOverScreen()'에 모든 것을 표시하도록하십시오. –

+0

그것은 게임 아키텍처에 따라 다릅니다. – Dimmerg

+0

나는 당신의 대답을 가지고 갈 것이고, 적당한 대답처럼 보일 것입니다. 그건 그렇고, 내가 '동기화'를 사용해야합니까? –

0

SurfaceView는보기입니다. SurfaceView를 확장 할 수 있습니다.

  • 은 서피스 뷰 SurfaceView 예를
  • 그런 된 setContentView (귀하의 표면보기 인스턴스)

를 작성하면 모든 작업이 완료된다.

public void render() { 
    if(gameOver) 
    activity.runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
     View gameOverView = LayoutInflater.from(activity).inflate(R.layout.gameover); 
      // code to get the layout 
      // and finally 
      layout.addView(gameOverView); 

    } 
    }); 
} 

화면을 통해 게임의 또 다른 활동을 시작하는 것이 더있다 : 당신이 runOnUiThread에 포장 할 경우

+0

저는 실제로 SurfaceView의 확장 클래스를 사용하고 있습니다. 엔티티 stats를 업데이트하고 gameOver를 확인한다고 가정하는 60fps (초당 60 회)라는 update()라는 메서드를 만들었습니다. 게임이 끝나면 게임은 일시 중지하고 게임 오버 화면을 표시해야합니다. –

+0

왜 onDraw 메서드를 사용하지 않습니까? – neo

+0

오, 특별한 이유없이, 나는 그것을 사용할 수 있다고 생각합니다. –