2017-04-01 39 views
0

比方说,我有一个演员foo和演员bar这是foo演员的较大版本。如何在foo旁边显示bar,同时轻敲foo,然后当foo不再被轻敲时(有点像工具提示),它会消失? Foo位于stage2d表中。 如何在演出时演示演员的更大更完整的版本?我想要什么查看演员同时点击放大的演员的更大版本libgdx

粗略的想法:一种是我想要做什么

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 
     } 
    }); 

代码: 在这种情况下toolTipCard是我想,当我接触到的一个字符串从selectedDeck显示演员。

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

创建您自己的图像(foo),重写该图像的绘制方法并使用标志绘制条纹(纹理或标签)。 touchDown方法更改平面值。 – Aryan

+0

获得被踢踏的演员('foo')的位置并且然后将其他演员('bar')添加到该舞台到以该被演奏的演员的大小翻译的位置('foo' ')? – Andy

+0

不需要创建另一个actor,只有一个Actor foo,bar只是foo的一部分,就像你的Actor的数据成员一样。 – Aryan

回答

0

正如评论描述的有2个选项:

  1. 编辑演员的绘制方法(如果你需要显示一个非常简单的工具提示使用本)。

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

要获得坐标,你可以使用: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实例的酒吧演员,并在每次点击时重新使用它。它可能比为他们每个人创造一个完整的演员都要便宜。但是,如果你甚至可以创建和销毁它,但没有任何问题。

+0

谢谢。我已经通过获取触摸位置来实现我想要的东西,取消投影并在舞台上向该位置添加“bar”(touchDown),然后在touchUp上从舞台上删除演员。然而'foo'实际上是'String'的'List',我希望'bar'在我点击字符串时出现,问题是当我点击没有字符串的列表时,它会显示'bar'所选的'String',所以'bar'不会恰好出现在它应该在的位置。我怎么能得到字符串的位置? (localToStageCoordinates仅适用于演员) – Andy

+0

我不明白字符串是如何演员的。你的意思是标签吗?请添加您使用的实际代码,以便更好地了解您的意思。添加屏幕截图/绘图也可以提供帮助。 –

+0

添加了我使用的代码。我想一个解决办法是将列表更改为列表