所以游戏运行正常,但我注意到在非常罕见的情况下,应用程序会在随机位置崩溃。我做了我的调试,我的理论是,因为表面上的触摸事件是在应用程序的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();
}
}
所以我想知道,我可以这样做吗?我在多线程应用程序上还不是很好,所以有人请告诉我这是否解决了我的问题,因为我无法真正验证,因为问题不会经常发生(只发生过两次)。如果是这样,我们不应该在我们实施的每一个游戏中都这样做吗?我在网上到处看到的教程从未这样做过。有原因吗?
答案 0 :(得分:0)
Synchronized确实有助于锁定线程更新方法到触摸事件,这也是我实现我的游戏的方式。我注意到两种方式同步时它是稳定的,而只有一种方法使它不稳定。