我正在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();显示了我前面提到的错误。我尝试了那个类中的不同方法,所有的方法都给了我相同的错误。
任何帮助都将不胜感激。
发布于 2012-04-29 04:49:08
我实际上测试了您建议的内容,这不是一个坏主意,但我代码中的问题是我从未真正创建过Grubber
对象(我怀念= new Grubber();
部分)。
可能是因为我在过去几周做了大量的代码编写和测试而导致的错误,对此我深表歉意。无论如何,我将使用这个线程作为主游戏循环,这个线程是根据我读到的here来更新表面视图中的画布的。
发布于 2012-04-25 13:05:44
如果我的猜测是正确的,那么您正在尝试直接更新UI线程。您不能从主线程以外的线程调用UI方法。尝试:
Runnable action = new Runnable() {
@Override
public void run() {
grub.updateGrubber();
} };
this.post(action);
instead of your `grub.updateGrubber();` line.
https://stackoverflow.com/questions/10308905
复制相似问题