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.javaTouchDragExample.java。这两个都做触摸和拖动。多点触控显然是多点触控,但如果您将当前的实体拖到它们上面,也不会打扰其他实体。也许这会对你有所帮助?

如果您还不知道,您可以使用此应用程序尝试这些示例。

顺便说一句……只是为了好玩,你试过了吗?

 mScene.setTouchAreaBindingOnActionDownEnabled(true);

?

从你的帖子来看,我认为你让这种方式变得比它必须的更难。您正在尝试做的是一个常见的功能,应该很容易用引擎来完成。

于 2012-10-19T22:08:49.127 回答