我正在与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;
}
}
请帮助我必须更改以使我的所有菜单正常工作..
谢谢,最诚挚的问候
答案 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个菜单项彼此重叠。尽量不要为菜单项设置位置。它们将自动设置。