2

AndEngine を使用して Android アプリを開発しています。ドラッグ可能なオブジェクトを含むゲーム シーンがあります。オブジェクトがドラッグされているときは、他のすべてのオブジェクトのタッチ領域を登録解除して干渉しないようにし、ドラッグ操作が完了したら、すべてのタッチ領域を再登録します。

ドラッグの開始時にこれを試して、これを試しました:

        touchAreas = gameScene.getTouchAreas();

    try {
        gameScene.detachChild(towerDragSprite);
        gameScene.detachChild(rangeDragSprite);
        gameScene.unregisterTouchArea(rangeDragSprite);
        for (int i = 0; i < touchAreas.size(); i++)
            gameScene.unregisterTouchArea(touchAreas.get(i));
    } catch (IllegalStateException e) {
    }

ドラッグが完了すると、次のようになります。

if (!pSceneTouchEvent.isActionMove()) {
                .
                .
                .
                try {
                    for (int i = 0; i < touchAreas.size(); i++)
                        gameScene.registerTouchArea(touchAreas.get(i));
                } catch (Exception e) {}
                return true;
            }

しかし、ドラッグが完了すると (タッチ領域が多くない場合でも) OutOfMemory 例外が発生します。

AndEngine のシーンにもscene.unregisterTouchAreas(ITouchAreaMathcer pTouchAreaMatcher)メソッドがあることがわかりましたが、ITouchAreaMatcher を取得する方法がわかりません。また、インターネットで解決策を見つけることができませんでした。

誰が何をすべきか知っていますか?

ありがとう

4

1 に答える 1

1

AndEngineExamplesのMultiTouchExample.javaまたはTouchDragExample.javaを確認してください。これらは両方とも、タッチとドラッグを行います。マルチタッチのものは明らかにマルチタッチですが、現在のものをドラッグしても気にならない他のエンティティもあります。多分それはあなたを助けるでしょうか?

まだ知らなかった場合は、このアプリでこれらの例を試すことができます。

ところで... 念のために言っておきますが、試してみましたか?

 mScene.setTouchAreaBindingOnActionDownEnabled(true);

?

あなたの投稿から判断すると、あなたはこの方法を必要以上に難しくしていると思います。あなたがやろうとしているのは、エンジンで簡単に実行できるはずの一般的な機能です。

于 2012-10-19T22:08:49.127 に答える