我在Android上编写游戏。我在调用Surface View类时使用Thread来更新和绘制我的游戏。在更新内部,我想根据游戏是否刚开始进行活动,这将启动我的菜单。
我的线程大部分..
while (myThreadRun) {
Canvas c = null;
try {
gameTime = System.currentTimeMillis();
c = myThreadSurfaceHolder.lockCanvas(null);
synchronized (myThreadSurfaceHolder) {
// Update Game.
myThreadSurfaceView.onUpdate();
// Draw Game.
myThreadSurfaceView.onDraw(c);
你可以看到我在哪里更新游戏...这里是onUpdate();
protected void onUpdate() {
// Test if menu needs to be displayed.
while (thread.getMenu()) {
// Test if menu activity has been started.
if (thread.getMenuRunning() == false) {
Intent menuIntent = new Intent(this.getContext(), MyMenu.class);
((Activity) cxt).startActivityForResult(menuIntent, 1);
thread.setMenuRunning(true);
}
}
我正在使用while循环,因为如果我没有使用它,那么线程就会继续。
基本上我只是不知道如何使用线程作为游戏循环来实现我的菜单。在任何地方,我看起来似乎都是最好的做法。
在我的菜单活动中,我只显示菜单布局和几个按钮,当人想要开始游戏时,它使用finish()返回我们玩游戏的线程。
我对此非常陌生,所以任何见解都会有所帮助,
谢谢
答案 0 :(得分:0)
您的SurfaceView线程应该只关注将游戏的当前状态绘制到SurfaceView。 不与渲染有关的任何事情 - 尤其是决定是否运行菜单活动的事情 - 都属于UI线程。
所以不要在你的onUpdate()中做所有的事情...在你的游戏的Activity类中做这件事,以响应按下的Menu按钮或其他东西。您应该暂停GameActivity.onPause()中的渲染线程并在GameActivity.onResume()中恢复它,这样在菜单显示时游戏就不会流失。
(onResume()也是游戏对用户刚刚通过菜单活动做出的更改做出反应的好时机。)