我在图像actor上创建了一个带有touchDown()
事件的简单测试。该活动适用于舞台,但不适用于演员。
这是代码:
我在父类(InputProcessor
)的构造函数中设置了AbstractScreen
。
Gdx.input.setInputProcessor(this.stage);
在子类中:
private TextureAtlas atlas;
private Image boardImg;
public void show(){
super.show();
atlas = new TextureAtlas(Gdx.files.internal("data/packs/mainMenu.atlas"));
AtlasRegion board = atlas.findRegion("board");
boardImg = new Image(board);
boardImg.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
Gdx.app.log("aaaa", "down");
return true;
}
});
stage.addActor(boardImg);
stage.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
Gdx.app.log("aaaa", "stage down");
return true;
}
});
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
boardImg.setPosition(stage.getWidth()/2 - boardImg.getWidth()/2, stage.getHeight()/4);
}
我正在桌面和Android上测试(结果相同)。 我得到了“逐步降级”事件但不是演员的事件。我也试过没有舞台活动。
答案 0 :(得分:0)
所有这些都有效:
boardImg.setTouchable(Touchable.enabled)
在舞台监听器中返回false或清除其监听器。
不要在父类中调用setInputProcessor(this.stage)而是在子类中调用。
答案 1 :(得分:0)
我认为问题是因为舞台的touchDown()
方法返回 true ,因此该事件将为“消耗”并且不会传播给它的孩子,演员,因此touchDown()
的{{1}}方法不会被调用。
答案 2 :(得分:0)
图片无法接收触摸事件,因为它没有大小。
仔细阅读文档:
请注意,actor必须指定其边界才能接收输入 这些范围内的事件。
只知道boardImg = new Image(board)
不会为你设置演员的宽度和高度。所以你需要手工制作它。假设您使用像素完美尺寸:
boardImg = new Image(board);
boardImg.setWidth(board.getWidth());
boardImg.setHeight(board.getHeight());
这样就可以了。祝你好运。