4

所以游戏运行良好,但我注意到,在极少数情况下,应用程序会在随机位置崩溃。我进行了调试,我的理论是,因为表面上的触摸事件是在应用程序的 UI 线程中处理的,并且游戏更新发生在一个单独的线程(循环线程或任何它被调用的线程)中,所以这两者正在互相踩踏。我的解决方案是同步表面上的触摸事件:

@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (this.gameLoopingThread) {
        //Handle touch events here
        return true;
    }
}

循环线程中的游戏更新:

@Override
public void run() {
    while (this.running) {
        synchronized (this) {
            doUpdate();
        }
        doDraw();
    }
}

所以我想知道,我可以这样做吗?我对多线程应用程序还不是很好,所以有人请告诉我这是否解决了我的问题,因为我无法真正验证,因为问题发生的频率不够高(只发生了两次)。如果是这样,我们不应该在我们实施的每个游戏上都这样做吗?我在网上到处看到的教程从来没有这样做过。有原因吗?

4

1 回答 1

0

同步确实有助于将线程更新方法锁定到触摸事件,这也是我实现游戏的方式。我注意到当双向同步时它是稳定的,而只有一个使其不稳定。

于 2012-11-25T02:01:07.377 回答