首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在actor被点击libgdx时显示较大版本的actor

在actor被点击libgdx时显示较大版本的actor
EN

Stack Overflow用户
提问于 2017-04-01 23:33:50
回答 1查看 86关注 0票数 0

假设我有一个角色foo和一个角色bar,它是foo角色的较大版本。如何在点击foo时在foo旁边显示bar,然后在不再点击foo时让它消失(有点像工具提示)?Foo位于stage2d表中。如何在演员被点击时显示更大、更完整的演员版本?

大概知道我想要什么:

代码语言:javascript
复制
    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就是我想要显示的角色。

代码语言:javascript
复制
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();
                }
            });
EN

回答 1

Stack Overflow用户

发布于 2017-04-03 14:51:38

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

  1. 编辑actor的draw方法(如果你需要显示一个非常简单的工具提示,使用这个)。
  2. 如果你想显示一个更高级的actor,它可以有它自己的操作。您可以获取foo的全局坐标,并将演员直接添加到您设置为可见/不可见(或淡入/淡出以获得更好的外观/感觉)的舞台上。

要获得可以使用的坐标,请使用:localToStageCoordinates

代码语言:javascript
复制
Vector2 v = foo.localToStageCoordinates(new Vector2());

或者相对于它的中心:

代码语言:javascript
复制
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,并在每次单击时重新使用它。这可能比为他们中的每一个创建一个完整的演员更便宜。然而,如果你甚至可以创建和销毁它在触摸/向上没有任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43158712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档