可以在Android游戏中同步触摸事件和更新吗?

时间:2012-11-25 01:39:23

标签: android synchronized ontouchevent game-loop

所以游戏运行正常,但我注意到在非常罕见的情况下,应用程序会在随机位置崩溃。我做了我的调试,我的理论是,因为表面上的触摸事件是在应用程序的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();
    }
}

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

1 个答案:

答案 0 :(得分:0)

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