所以我做了一些似乎有意义的事情。
private void loadScenes()
{
mainScene = new Scene();
menu = new Sprite(0, 0, menuTextureRegion, mEngine.getVertexBufferObjectManager()){
@Override
protected void preDraw(GLState pGLState, Camera pCamera)
{
super.preDraw(pGLState, pCamera);
pGLState.enableDither();
}
};
newgamebutton = new ButtonSprite(25, 200, newgameTextureRegion, mEngine.getVertexBufferObjectManager());
multiplayerbutton = new ButtonSprite(25, 310, multiplayerTextureRegion, mEngine.getVertexBufferObjectManager());
menu.setScale(1.65f);
menu.setPosition((CAMERA_WIDTH - menu.getWidth()) * 0.5f, (CAMERA_HEIGHT - menu.getHeight()) * 0.5f);
mainScene.attachChild(menu);
mainScene.attachChild(newgamebutton);
mainScene.attachChild(multiplayerbutton);
mainScene.registerTouchArea(multiplayerbutton);
mainScene.setTouchAreaBindingOnActionDownEnabled(true);
multiplayerbutton.onAreaTouched(mButtonTouched, multiplayerbutton.getWidth(), multiplayerbutton.getHeight());
if(mButtonTouched.isActionDown()) {
mainScene.detachChild(menu);
mainScene.detachChild(multiplayerbutton);
}
}
似乎很有道理。当按下“多人游戏按钮”时,它会给你mButtonTouched,当按下它时...它会分离菜单和多人游戏按钮。这显然只是我测试的东西,而不是任何实际项目的一部分,因为我只是在学习,但我得到一个空指针异常,应用程序在显示“菜单场景”之前关闭,这显然通常有效。此外,在各种网站上,它表示我应该在multiplayerbutton之前放置“public boolean”,但是Eclipse不会那样。
我相信你们已经想到了这一点,但我对AndEngine来说是新手。谢谢你的帮助,伙计们!
答案 0 :(得分:4)
在查看代码后,我相信你想做这样的事情:
ButtonSprite button = new ButtonSprite(25, 310, multiplayerTextureRegion, mEngine.getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(TouchEvent pTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
if(pTouchEvent.isActionDown()) {
mainScene.detachChild(menu);
mainScene.detachChild(multiplayerbutton);
}
return super.onAreaTouched(pTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
}
};
您的代码不起作用,因为最后一个if语句没有意义 - 它正在检查方法loadScenes()执行时是否按下按钮。我建议你阅读匿名内部类,我花了很长时间才弄清楚在AndEngine中使用它们是一种有效且有用的方法。
以下是管理按钮的不同方式的原始示例:
mScene.setOnAreaTouchListener(new IOnAreaTouchListener() {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, ITouchArea pTouchArea, float pTouchAreaLocalX, float pTouchAreaLocalY) {
if (pTouchArea.equals(button) {
doSomething();
return true;
}
return false;
}
});
请注意,这仅在触摸Shapes时有效,如果要检测Shapes之外的触摸事件,则需要使用IOnSceneTouchListener。