ClickListener enter/exit 事件无法正常工作 Libgdx
ClickListener enter/exit events not working properly Libgdx
我正在创建一个包含多个演员的 Table
。 table 还包含一个附加了 ClickListener 的图像。当他们被点击或点击时,我从其他演员那里画了一个箭头,箭头可以瞄准 Table 中的图像。我想知道箭头何时从 Table 进入和退出图像。问题是输入事件并不总是触发,或者它只从图像的一部分触发,或者一旦输入被触发就会触发退出。
知道哪里出了问题吗?
oponentHand = new Table();
for (int i = 0; i < 4; i++) {
oponentHand.add().width(game.developingWidth / (11.5f)).height(game.developingHeight / (5.5f)).padLeft(5)
.expand();
}
Texture oponentTexture = new Texture(Gdx.files.internal("data/mihai.jpg"));
Table tempTable = new Table();
oponentPortrait = new Image(oponentTexture);
oponentLife = new Label("Life", textsStyle);
tempTable.add(oponentLife).row();
oponentPortrait.setTouchable(Touchable.enabled);
tempTable.add(oponentPortrait).expand().fill();
oponentPortrait.addListener(new ClickListener() {
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
super.enter(event, x, y, pointer, fromActor);
isOnTarget = true;
targetedCardType = "enemyHero";
System.out.println("Entering enemy hero");
}
public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) {
super.exit(event, y, y, pointer, toActor);
if (pointer == -1) {
isOnTarget = false;
System.out.println("Exiting enemy hero");
}
}
});
Texture oponentPowerTexture1 = new Texture(Gdx.files.internal("data/powSword.png"));
Texture oponentPowerTexture2 = new Texture(Gdx.files.internal("data/powShield.png"));
Image firstOponentPower = new Image(oponentPowerTexture1);
Image secondOponentPower = new Image(oponentPowerTexture2);
oponentHand.add(firstOponentPower).width(game.developingWidth / (11.5f)).height(game.developingHeight / (6))
.padLeft(5);
oponentHand.add(tempTable).width(game.developingWidth / (11.5f)).height(game.developingHeight / (6)).fill().padLeft(5);
oponentHand.add(secondOponentPower).width(game.developingWidth / (11.5f)).height(game.developingHeight / (6))
.padLeft(5);
for (int i = 0; i < 4; i++) {
oponentHand.add().width(game.developingWidth / (11.5f)).height(game.developingHeight / (6)).padLeft(5)
.expand();
}
我发现了导致 enter/exit 事件未触发的问题。我在游戏后期将另一个演员添加到舞台上,巧合的是它恰好被添加到我试图验证 enter/exit 事件的图像之上。我正在淡入然后淡出我使用 Action
添加到舞台上的演员,所以它只在很短的时间内可见。问题是我从来没有将它从舞台上移除,因为淡出只会改变演员的 alpha,所以它不允许它下面的图像获得事件。我通过使用 Actions.removeActor()
.
将其淡出后将其从舞台上移除来解决它
我正在创建一个包含多个演员的 Table
。 table 还包含一个附加了 ClickListener 的图像。当他们被点击或点击时,我从其他演员那里画了一个箭头,箭头可以瞄准 Table 中的图像。我想知道箭头何时从 Table 进入和退出图像。问题是输入事件并不总是触发,或者它只从图像的一部分触发,或者一旦输入被触发就会触发退出。
知道哪里出了问题吗?
oponentHand = new Table();
for (int i = 0; i < 4; i++) {
oponentHand.add().width(game.developingWidth / (11.5f)).height(game.developingHeight / (5.5f)).padLeft(5)
.expand();
}
Texture oponentTexture = new Texture(Gdx.files.internal("data/mihai.jpg"));
Table tempTable = new Table();
oponentPortrait = new Image(oponentTexture);
oponentLife = new Label("Life", textsStyle);
tempTable.add(oponentLife).row();
oponentPortrait.setTouchable(Touchable.enabled);
tempTable.add(oponentPortrait).expand().fill();
oponentPortrait.addListener(new ClickListener() {
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
super.enter(event, x, y, pointer, fromActor);
isOnTarget = true;
targetedCardType = "enemyHero";
System.out.println("Entering enemy hero");
}
public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) {
super.exit(event, y, y, pointer, toActor);
if (pointer == -1) {
isOnTarget = false;
System.out.println("Exiting enemy hero");
}
}
});
Texture oponentPowerTexture1 = new Texture(Gdx.files.internal("data/powSword.png"));
Texture oponentPowerTexture2 = new Texture(Gdx.files.internal("data/powShield.png"));
Image firstOponentPower = new Image(oponentPowerTexture1);
Image secondOponentPower = new Image(oponentPowerTexture2);
oponentHand.add(firstOponentPower).width(game.developingWidth / (11.5f)).height(game.developingHeight / (6))
.padLeft(5);
oponentHand.add(tempTable).width(game.developingWidth / (11.5f)).height(game.developingHeight / (6)).fill().padLeft(5);
oponentHand.add(secondOponentPower).width(game.developingWidth / (11.5f)).height(game.developingHeight / (6))
.padLeft(5);
for (int i = 0; i < 4; i++) {
oponentHand.add().width(game.developingWidth / (11.5f)).height(game.developingHeight / (6)).padLeft(5)
.expand();
}
我发现了导致 enter/exit 事件未触发的问题。我在游戏后期将另一个演员添加到舞台上,巧合的是它恰好被添加到我试图验证 enter/exit 事件的图像之上。我正在淡入然后淡出我使用 Action
添加到舞台上的演员,所以它只在很短的时间内可见。问题是我从来没有将它从舞台上移除,因为淡出只会改变演员的 alpha,所以它不允许它下面的图像获得事件。我通过使用 Actions.removeActor()
.