假设我有一个角色foo和一个角色bar,它是foo角色的较大版本。如何在点击foo时在foo旁边显示bar,然后在不再点击foo时让它消失(有点像工具提示)?Foo位于stage2d表中。如何在演员被点击时显示更大、更完整的演员版本?
大概知道我想要什么:
Actor foo = new Actor();
foo.addListener(new ActorGestureListener() {
public void touchDown (InputEvent event, float x, float y, int pointer, int button) {
// show bar next to foo (like a tooltip)
}
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
// make bar dissapear
}
});代码实现了我想要的功能:在本例中,当我触摸selectedDeck中的一个字符串时,toolTipCard就是我想要显示的角色。
Stage collectionStage;
List<String> selectedDeck;
TestCard tooltipCard;
Vector3 touch = new Vector3();
selectedDeck.addListener(new ActorGestureListener() {
public void touchDown(InputEvent event, float x, float y, int count, int button) {
if (selectedDeck.getItems().size > 0) {
tooltipCard = new TestCard(game.cardFont, cardNameToCard.get(selectedDeck.getSelected()));
tooltipCard.setWidth(Gdx.graphics.getWidth() / (7 * scale));
tooltipCard.setHeight(Gdx.graphics.getHeight() / (3.3f * scale));
touch = viewport.unproject(touch.set(Gdx.input.getX(), Gdx.input.getY(), 0));
tooltipCard.setPosition(touch.x - tooltipCard.getWidth(), touch.y - tooltipCard.getHeight());
collectionStage.addActor(tooltipCard);
}
}
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
tooltipCard.remove();
}
});发布于 2017-04-03 14:51:38
如评论中所述,有两个选项:
要获得可以使用的坐标,请使用:localToStageCoordinates
Vector2 v = foo.localToStageCoordinates(new Vector2());或者相对于它的中心:
Vector2 v = foo.localToStageCoordinates(new Vector2(foo.getWidth()/2,foo.getHeight()/2));然后使用例如:bar.addAction(Actions.fadeIn(0.5f));和bar.addAction(Actions.fadeOut(0.5f));来显示/隐藏工具提示
出于优化的目的,您可以在屏幕上的所有foo实例中重用bar actor,并在每次单击时重新使用它。这可能比为他们中的每一个创建一个完整的演员更便宜。然而,如果你甚至可以创建和销毁它在触摸/向上没有任何问题。
https://stackoverflow.com/questions/43158712
复制相似问题