我正在测试libgdx,但我陷入了用户输入处理。
我的第一次尝试是直接从渲染方法使用Gdx.input,但我觉得重新发明轮子,因为我在编写触摸事件时会编写大量代码来检测输入区域。
我几乎肯定应该使用Actor类更好的方法,但是因为事件永远不会发生,所以我必须做错事。
这是我的代码:
...
Texture texture = new Texture(Gdx.files.internal("assets/sprite-sheet.png"));
singlePlayerButton = new Image("SinglePlayerButton", new TextureRegion(texture,0,0,50,50)){
@Override
public boolean touchDown(float x, float y, int pointer) {
// TODO Auto-generated method stub
System.out.println("touch down");
return super.touchDown(x, y, pointer);
}
@Override
public void touchUp(float x, float y, int pointer) {
System.out.println("touch up");
}
};
stage.addActor(singlePlayerButton);
...
public void render(float delta) {
// Clear the screen
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
stage.draw();
spriteBatch.end();
}
图像显示效果不错,但点击它的次数并不重要我从未获得过该事件。我错过了什么?注册活动?我在Stage或Actor类中找不到任何addTouchListener()方法。
谢谢!
答案 0 :(得分:16)
您必须使用libGDX注册所有输入处理器。舞台实现InputProcessor
,因此您必须注册它:
@Override
public void create() {
//... initialization
Gdx.input.setInputProcessor(stage);
}