我正在关注游戏开发的这个教程,我遇到了一些让我感到困惑的事情。
因此,在本教程中,创建了一个扩展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变量在哪里实例化?我的项目中没有任何代码行指示它,除了简历方法。 是否在创建GameView实例时调用了resume方法,还是我还缺少其他东西?
打扰一下,如果这是一个愚蠢的问题,但我甚至无法弄清楚如何谷歌这个。
答案 0 :(得分:1)
pause()
。所以这种方法很好。每次pause()
被称为gameThread都不为空。