Я следую этому руководству по разработке игр, и я столкнулся с чем-то, что немного озадачивает меня.Ссылка на текущую ссылку для Android SurfaceView
Итак, в учебнике создан класс, который расширяет SurfaceView, реализующий Runnable, для управления представлением содержимого основной игры. Вид поверхности устанавливается как вид контента основной деятельности следующим образом: определяется класс
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 следующим образом:
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();
}
}
}
Не поймите меня неправильно - код работает отлично, но я смущен относительно , где переменная gameThread получает экземпляр? В моем проекте нет строки кода, указывающей на это, кроме того, в методе возобновления. Является ли метод resume для создания экземпляра GameView, или есть что-то еще, что мне не хватает?
Извините, если это глупый вопрос, но я не мог понять, как это сделать.
В 'gameThread = new Thread (this); реализация Runnable, переданная конструктору Thread, и' gameThread.start() 'выполняет метод Overwritten' run() '. См. [Link] (https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#Thread (java.lang.Runnable)) –
Но этот код находится в резюме() метод GameView. Этот метод называется созданием экземпляра GameView? – Nirri
Он вызывается, когда игровое представление возобновляется; это должно быть после отображения представления и «активного», так что экземпляр «Thread» игры не пытается манипулировать «SurfaceView», если он недействителен для рендеринга. Не видя оставшегося кода, это, вероятно, происходит во время жизненного цикла активности (например, «Activity.onResume») и/или пункта меню, чтобы начать/приостановить/возобновить игру. –