Java libgdx inputListener不';我不能和演员一起工作
我尝试将InputListener与Actor一起使用,但不起作用。我真的不知道为什么。我找到了很多关于它的信息,看到了官方文件,但没有一个对我没有帮助 触摸精灵时,不会显示我的日志消息。但是如果我使用全局输入处理器(用于整个屏幕),它工作得很好,但是我只想为actor添加一个侦听器 我做错了什么Java libgdx inputListener不';我不能和演员一起工作,java,android,libgdx,Java,Android,Libgdx,我尝试将InputListener与Actor一起使用,但不起作用。我真的不知道为什么。我找到了很多关于它的信息,看到了官方文件,但没有一个对我没有帮助 触摸精灵时,不会显示我的日志消息。但是如果我使用全局输入处理器(用于整个屏幕),它工作得很好,但是我只想为actor添加一个侦听器 我做错了什么 public class GameScreen implements Screen { final Launch launch; Texture texture; Stage
public class GameScreen implements Screen {
final Launch launch;
Texture texture;
Stage stage;
public GameScreen(Launch launch) {
Gdx.app.setLogLevel(Application.LOG_DEBUG);
this.launch = launch;
texture = new Texture("hero.png");
stage = new Stage();
Hero hero = new Hero();
hero.addListener(new HeroListener());
stage.addActor(hero);
Gdx.input.setInputProcessor(stage);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
stage.act(Gdx.graphics.getDeltaTime());
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
stage.dispose();
texture.dispose();
}
private class Hero extends Actor {
@Override
public boolean addListener(EventListener listener) {
Gdx.app.debug("MyTag", "my debug message");
return super.addListener(listener);
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(texture, 0, 0, 500, 500);
}
}
private class HeroListener extends InputListener {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
Gdx.app.debug("MyTag", "touch down");
return super.touchDown(event, x, y, pointer, button);
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
Gdx.app.debug("MyTag", "touch up");
super.touchUp(event, x, y, pointer, button);
}
}
}
问题是你没有给你的演员任何尺寸或位置
InputListener
用于Actor
范围内的事件。如果您没有为参与者定义任何大小,它将永远不会接收事件
Hero hero = new Hero();
hero.addListener(new HeroListener());
hero.setBounds(0, 0, 500, 500);
stage.addActor(hero);
这将使您的InputListener侦听(0,0)、(500,500)范围内的触地/上升事件
此外,这也很方便,因为在以下情况下绘制时可以使用这些边界:
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(texture, getX(), getY(), getWidth(), getHeight());
}
此外,你必须在触地得分时返回true,否则触地得分将不会被调用。