gpt4 book ai didi

java - libgdx inputListener 不适用于 Actor

转载 作者:行者123 更新时间:2023-11-29 19:10:53 24 4
gpt4 key购买 nike

我尝试将 InputListener 与 Actor 一起使用,但它不起作用。我真的不知道为什么。我找到了很多关于它的信息并查看了官方文档,但没有一个对我没有帮助。

当我触摸 sprite 时,我的日志消息没有显示。但是如果我使用全局输入处理器(用于整个屏幕)它工作正常,但我只想为 Actor 添加一个监听器。

我做错了什么?

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

最佳答案

问题是您没有给 Actor 任何尺寸或位置。 InputListenerActor 范围内的事件工作。如果您没有为您的 Actor 定义任何大小,它将永远不会收到事件。

Hero hero = new Hero();
hero.addListener(new HeroListener());

hero.setBounds(0, 0, 500, 500);

stage.addActor(hero);

这应该让您的 InputListener 监听 (0, 0), (500, 500) 范围内的 touchDown/Up 事件。

此外,这很方便,因为您可以在之后绘制时使用这些边界:

@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(texture, getX(), getY(), getWidth(), getHeight());
}

关于java - libgdx inputListener 不适用于 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com