AndEngine:Missmatch在点击监听器上获取Item菜单的id

时间:2013-06-26 05:57:02

标签: android andengine menuitem

我正在与AndEngine一起构建我的游戏...... 我创建菜单屏幕,至少有4个菜单项垂直设置..

项目编号1,2和4运行良好,但是当它(在屏幕上)点击了指向id为2的menuItem onclick监听器时,没有3的问题,以及动画精灵/图像将变为no 2。

这里是我的代码

菜单项ID

    private MenuScene menuChildScene;
    private final int SINGLE_GAME = 0;
    private final int MULTI_GAME = SINGLE_GAME+ 1;
    private final int HIGH_SCORE = MULTI_GAME + 1;
    private final int ABOUT = HIGH_SCORE + 1;

创建菜单项的东西

private void createMenuChildScene()
    {
        menuChildScene = new MenuScene(camera);
        menuChildScene.setPosition(0,0);

        final IMenuItem opNewgame = new ScaleMenuItemDecorator(new SpriteMenuItem(SINGLE_GAME, resourcesManager.btnSinglegame, vbom), 1.2f, 1);
        final IMenuItem opMultiGame = new ScaleMenuItemDecorator(new SpriteMenuItem(MULTI_GAME, resourcesManager.btnMultiPlayergame, vbom), 1.2f, 1);
        final IMenuItem opHightScore = new ScaleMenuItemDecorator(new SpriteMenuItem(HIGH_SCORE, resourcesManager.btnhighscore, vbom), 1.2f, 1);
        final IMenuItem opAbout= new ScaleMenuItemDecorator(new SpriteMenuItem(ABOUT, resourcesManager.btnabout, vbom), 1.2f, 1);

        menuChildScene.addMenuItem(opNewgame);
        menuChildScene.addMenuItem(opMultiGame);
        menuChildScene.addMenuItem(opHightScore);
        menuChildScene.addMenuItem(opAbout);

        menuChildScene.buildAnimations();
        menuChildScene.setBackgroundEnabled(false);
        opNewgame.setPosition(opNewgame.getX(), opNewgame.getY() - 25);
        opMultiGame.setPosition(opMultiGame.getX(), opNewgame.getY() - 105);
        opHightScore.setPosition(opHightScore.getX(), opMultiGame.getY() - 105);
        opAbout.setPosition(opAbout.getX(), opHightScore.getY() - 105);
        menuChildScene.setOnMenuItemClickListener(this);

        setChildScene(menuChildScene);
    }

onlick手柄和listerner ..

@Override
    public boolean onMenuItemClicked(
            org.andengine.entity.scene.menu.MenuScene pMenuScene,
            IMenuItem pMenuItem, float pMenuItemLocalX, float pMenuItemLocalY) { Log.i(TAG, HIGH_SCORE +  " click : " + pMenuItem.getID());
        // TODO Auto-generated method stub
        switch(pMenuItem.getID()){ 
            case SINGLE_GAME:
                resourcesManager.click.play();
                SceneManager.getInstance().loadGameScene(engine);
                return true;
            case MULTI_GAME: 
                resourcesManager.click.play();
                return true;
            case HIGH_SCORE: 
                resourcesManager.click.play();
                return true;
            case ABOUT:
                resourcesManager.click.play();
                return true;
            default:
                return false;
        }
    }

请帮助我必须更改以使我的所有菜单正常工作..

谢谢,最诚挚的问候

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

据我所知,在某些情况下,ItemMenus会回复他们首次被放置的原始位置。因此,如果您从每个itemMenu中删除setPosition,然后尝试单击您的项目,它应该可以正常工作。

我的代码看起来几乎就像你的代码:

targetMenuScene = new MenuScene(camera);
targetMenuScene.setPosition(500, -1000);
targetMenuScene.attachChild(targetBackground);
targetMenuScene.setBackgroundEnabled(false);
targetMenuScene.setOnMenuItemClickListener(this);

xMenuItem = new ScaleMenuItemDecorator(new SpriteMenuItem(MENU_X,
           resourcesManager.x, vbom), 2.1f, 2f);
xMenuItem.setPosition(920, -62);
targetMenuScene.addMenuItem(xMenuItem);

... (here are many more menuItems being added....)

setChildScene(targetMenuScene);

这段代码非常棒。 另一方面,我只是将此代码复制到程序中的其他位置,我就像你一样得到同样的问题!

我注意到的是,如果我将代码替换为:

subLevelSelectMenu.buildAnimations();
subLevelSelectMenu.addMenuItem(levels_level1);
subLevelSelectMenu.addMenuItem(levels_level2);
subLevelSelectMenu.addMenuItem(levels_level3);
subLevelSelectMenu.addMenuItem(levels_level4);
subLevelSelectMenu.addMenuItem(levels_level5);

(我的意思是,首先给他们他们的位置(位置),第二次使用buildAnimations,最后,将它们添加到menuScene)....

现在完美无缺。我不明白为什么,也不确定BuildAnimations()实际上做了什么,但我希望这会对你有所帮助。

**请注意,在我的第一个例子中,我甚至没有使用BuildAnimations()。但我只能在游戏的不同部分解决我的问题。

如果其他人可以分享有关此问题的一些信息,请执行此操作。

修改

在尝试了其他一些东西之后,我简单地使用了

subLevelSelectMenu.clearTouchAreas();

在添加所有菜单项之前......嘿,这有效!

祝你好运!

答案 1 :(得分:0)

再次检查菜单项的位置。通常,您不必设置它们的位置,它们一个接一个地垂直定位。我认为你的2个菜单项彼此重叠。尽量不要为菜单项设置位置。它们将自动设置。