假设我有一个演员foo
和一个演员bar
,它是foo
演员的更大版本。如果点击bar
时我如何在foo
旁边显示foo
,然后在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是我想要显示的actor。
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();
}
});
答案 0 :(得分:0)
如评论中所述,有两个选项:
编辑一个actor的draw方法(如果你需要显示一个非常简单的工具提示,请使用它)。
如果你想展示一个更高级的演员,可以拥有自己的动作。您可以获取foo的全局坐标并将actor直接添加到您设置可见/不可见的舞台(或淡入/淡出以获得更好的外观/感觉)。
要获取您可以使用的坐标: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,并在每次单击时重新调整它。它可能比为每个人创造一个完整的演员便宜。但是,如果您甚至可以在触摸下来/向上创建并销毁它而没有任何问题。