我正在Android上开发一款小游戏,我有一个问题。我希望我的主游戏循环是从SurfaceView调用的线程,但每次我想从这个线程调用另一个类的方法时,我得到“意外停止”消息。
更清楚:
@Override
public void run() { //Game Loop
Canvas canvas = null;
while (mRun) {
canvas = mHolder.lockCanvas();
if (canvas != null) {
grub.updateGrubber(); //here I want to update state.
mPanel.doDraw(canvas);
mHolder.unlockCanvasAndPost(canvas);
}
}
}
行grub.updateGrubber();显示我之前提到的错误。我尝试了该类的不同方法,所有这些方法都给了我同样的错误。
任何帮助将不胜感激。
答案 0 :(得分:1)
如果我的猜测是正确的,那么您正在尝试直接更新UI线程。您不能从主线程以外的线程调用UI方法。尝试:
Runnable action = new Runnable() {
@Override
public void run() {
grub.updateGrubber();
} };
this.post(action);
instead of your `grub.updateGrubber();` line.
答案 1 :(得分:1)
我实际上测试了你的建议,并不是一个坏主意,但我的代码中的问题是我从未真正创建过Grubber
对象(我想念= new Grubber();
部分)。< / p>
可能是与我在过去几周内完成的大量代码编写和测试相关的错误,对此感到抱歉。无论如何,我将使用创建的线程作为主游戏循环,根据我读过的here来更新surfaceview中的画布。