2013-06-26 89 views
0

林與AndEngine合作,建立自己的遊戲... 林創建菜單屏幕有至少4個菜單項豎置..AndEngine:Missmatch獲得項目菜單的ID上點擊收聽

貨號1,2,和4工作正常,但沒有3時,它(屏幕上)點擊menuItem onclick聽衆指向ID號2,還有動畫精靈/圖像變成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); 
    } 

點擊數處理和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

爲什麼在'onMenuItemClicked'中使用'MenuScene'的全限定名,而不是在'createMenuChildScene'中? =>檢查您的導入MenuScene,以確保它來自AndEngine或您的同名類。 –

回答

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(); 

將所有菜單項...哎,那工作過!

祝你好運!