2013-06-17 3 views
0

Я создал эту маленькую игру, используя SurfaceView, и теперь я хочу показать игру по экрану. Поскольку методы обновления и рендеринга SurfaceView вызываются другим Thread, я хочу знать, как правильно раздувать игру по XML и добавлять ее на экран.android game over screen

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 был создан в потоке пользовательского интерфейса, и render() называется по второму потоку, поэтому он выдает исключение.

ответ

1

Вы способ должен работать, если вы оберните его в runOnUiThread:

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); 

    } 
    }); 
} 

Может быть лучше, чтобы начать другую деятельность для игры по экрану?

+0

это лучше, чем вызов public void render() {if (gameover) activity.showGameOverScreen(); ...... '? и показать 'showGameOverScreen()' отображение всего –

+0

Это зависит от вашей игровой архитектуры. – Dimmerg

+0

Пойду с твоими ответами, похоже на правильную. Кстати, следует ли использовать 'synchronize'? –

0

SurfaceView - это вид. Вы можете просто расширить SurfaceView.

  • Создать свой SurfaceView экземпляр
  • Тогда setContentView (Your Surface View Instance)

, и вы сделали.

+0

Я сделал это, я на самом деле использую расширенный класс SurfaceView. Я создал метод под названием update(), который называется 60 раз в секунду (60FPS), который, как предполагается, обновляет статистику объектов и проверяет наличие gameOver. Когда игра закончена, игра должна приостанавливаться и показывать экран игры. –

+0

Почему вы не используете метод onDraw? – neo

+0

О, нет особой причины, я полагаю, я мог бы использовать это. –