Сцена выполнена довольно хорошо, но прикосновение не работает. Я зарегистрировал все спрайты и сделал onTouchAreaBindingOnActionDownEnabled(true)
. Я попытался использовать Andengine's в MenuScene
, но он не работает, касаясь только части. Вот мой настоящий код. У меня была такая же проблема, как этот господин here, так как у меня не было никакого выхода я изменил мой код:Android Touch не работает. Andengine
import org.andengine.engine.camera.Camera;
import org.andengine.entity.sprite.Sprite;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.util.GLState;
import org.andengine.opengl.vbo.VertexBufferObjectManager;
import com.***.RM; //I changed the directory name to ***
import com.***.SceneManager; //I changed the directory name to ***
import com.***.SceneType; //I changed the directory name to ***
public class MainMenuScene extends BaseScene {
private final int MENU_PLAY = 0;
private final int MENU_OPTIONS = 1;
private final int MENU_CREDITS = 2;
private final int MENU_EXIT = 3;
final int w = 256, h = 64;
public class MenuSprite extends Sprite {
private int ID;
public MenuSprite(int pID, int pX, int pY, ITextureRegion tex, VertexBufferObjectManager vbom) {
super(pX, pY, w, h, tex, vbom);
this.ID = pID;
}
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
System.out.println("text");
if (pSceneTouchEvent.isActionDown() || pSceneTouchEvent.isActionMove()) {
onclick(this.ID);
this.setScale(1.5f);
return true;
} else {
this.setScale(1f);
}
return true;
}
}
@Override
public void createScene() {
attachChild(new Sprite(RM.MX, RM.MY, rM.menu_back, vbom) {
@Override
protected void preDraw(GLState pGLState, Camera pCamera) {
super.preDraw(pGLState, pCamera);
pGLState.enableDither();
}
});
final MenuSprite playMenuItem = new MenuSprite(MENU_PLAY, RM.MX, RM.CH * 4/6, rM.menu_play, vbom);
final MenuSprite optionsMenuItem = new MenuSprite(MENU_OPTIONS, RM.MX, RM.CH * 3/6, rM.menu_options, vbom);
final MenuSprite creditsMenuItem = new MenuSprite(MENU_CREDITS, RM.MX, RM.CH * 2/6, rM.menu_credit, vbom);
final MenuSprite exitMenuItem = new MenuSprite(MENU_EXIT, RM.MX, RM.CH * 1/6, rM.menu_exit, vbom);
attachChild(playMenuItem);
attachChild(optionsMenuItem);
attachChild(creditsMenuItem);
attachChild(exitMenuItem);
registerTouchArea(playMenuItem);
registerTouchArea(optionsMenuItem);
registerTouchArea(creditsMenuItem);
registerTouchArea(exitMenuItem);
setTouchAreaBindingOnActionDownEnabled(true);
}
@Override
public void disposeScene() {
}
@Override
public SceneType getSceneType() {
return SceneType.SCENE_MENU;
}
@Override
public void onBackKeyPressed() {
System.exit(0);
}
public void onclick(int ID) {
switch (ID) {
case MENU_PLAY:
SceneManager.getInstance().createLevelSelectionScene();
break;
case MENU_OPTIONS:
break;
case MENU_EXIT:
onBackKeyPressed();
break;
default:
break;
}
}
}
Вот скриншот (я удалил название):
В LogCat я получаю следующая на прикосновения:
04-02 22:29:31.909: I/InputReader(159): dispatchTouch::touch event's action is 0
04-02 22:29:31.909: I/InputDispatcher(159): Delivering touch to current input target
но мои приложения отфильтрованные сообщения уже нет журнала потрогать, даже не system.out
, что я добавил.