4

したがって、ゲームは正常に動作しますが、非常にまれな状況で、アプリがランダムな場所でクラッシュすることに気付きました。私はデバッグを行いましたが、表面上のタッチ イベントはアプリの UI スレッドで処理され、ゲームの更新は別のスレッド (ループ スレッドなど) で行われるため、これら 2 つが互いに足を踏み入れているというのが私の理論です。私の解決策は、表面のタッチ イベントを同期することでした。

@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

Synchronized は、メソッドを更新するスレッドをタッチ イベントにロックするのに役立ちます。これが、私のゲームの実装方法でもあります。両方の方法で同期すると安定していることに気付きましたが、一方だけが不安定なままです。

于 2012-11-25T02:01:07.377 に答える