AndEngine - 取消注册,然后注册所有场景的触摸区域

时间:2012-10-18 08:20:52

标签: android andengine out-of-memory

我正在使用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,并且无法在互联网上找到解决方案。

任何人都知道该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

MultiTouchExample.java中查看TouchDragExample.javaAndEngineExamples。这些都触摸和拖动。多点触控显然是多点触控,但是如果你将当前的一个拖过它们,还有其他实体不会受到打扰。也许这会对你有帮助吗?

如果您还不知道,可以使用this app尝试这些示例。

顺便说一句......只是为了踢,你试过吗

 mScene.setTouchAreaBindingOnActionDownEnabled(true);

根据你的帖子判断,我认为你的做法比以往更难。你要做的是一个常见的功能,应该很容易用引擎。