首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android SurfaceView/Thread更新游戏状态

Android SurfaceView/Thread更新游戏状态
EN

Stack Overflow用户
提问于 2012-04-25 11:20:48
回答 2查看 579关注 0票数 0

我正在Android上开发一个小游戏,我有一个问题。我希望我的主游戏循环是从SurfaceView调用的线程,但每次我想从这个线程调用另一个类的方法时,我都会收到“意外停止”消息。

更清楚地说:

代码语言:javascript
运行
复制
@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();显示了我前面提到的错误。我尝试了那个类中的不同方法,所有的方法都给了我相同的错误。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-29 04:49:08

我实际上测试了您建议的内容,这不是一个坏主意,但我代码中的问题是我从未真正创建过Grubber对象(我怀念= new Grubber();部分)。

可能是因为我在过去几周做了大量的代码编写和测试而导致的错误,对此我深表歉意。无论如何,我将使用这个线程作为主游戏循环,这个线程是根据我读到的here来更新表面视图中的画布的。

票数 1
EN

Stack Overflow用户

发布于 2012-04-25 13:05:44

如果我的猜测是正确的,那么您正在尝试直接更新UI线程。您不能从主线程以外的线程调用UI方法。尝试:

代码语言:javascript
运行
复制
Runnable action = new Runnable() {  
            @Override 
            public void run() {    

                grub.updateGrubber();  
                }     };
                this.post(action);
 instead of your `grub.updateGrubber();`  line.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10308905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档