演员被点击libgdx时显示更大版本的演员

时间:2017-04-01 15:33:50

标签: android libgdx scene2d

假设我有一个演员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();
                }
            });

1 个答案:

答案 0 :(得分:0)

如评论中所述,有两个选项:

  1. 编辑一个actor的draw方法(如果你需要显示一个非常简单的工具提示,请使用它)。

  2. 如果你想展示一个更高级的演员,可以拥有自己的动作。您可以获取foo的全局坐标并将actor直接添加到您设置可见/不可见的舞台(或淡入/淡出以获得更好的外观/感觉)。

  3. 要获取您可以使用的坐标: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,并在每次单击时重新调整它。它可能比为每个人创造一个完整的演员便宜。但是,如果您甚至可以在触摸下来/向上创建并销毁它而没有任何问题。

相关问题