Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在点击actor时显示更大版本的actor libgdx_Android_Libgdx_Scene2d - Fatal编程技术网

Android 在点击actor时显示更大版本的actor libgdx

Android 在点击actor时显示更大版本的actor libgdx,android,libgdx,scene2d,Android,Libgdx,Scene2d,假设我有一个演员foo和一个演员bar,这是foo演员的更大版本。当点击foo时,如何在foo旁边显示bar,然后在不再点击foo时使其消失(有点像工具提示)Foo位于stage2d表中。 当演员被点击时,我如何展示更大、更完整的版本 大致了解我想要什么: Actor foo = new Actor(); foo.addListener(new ActorGestureListener() { public void touchDown (InputEvent

假设我有一个演员
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
        }
    });
这种代码符合我的要求: 在本例中,ToolTiCard是我在触摸
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();
                }
            });
Stage集合Stage;
列出所选复选框;
测试卡工具卡片;
Vector3 touch=新Vector3();
selectedDeck.addListener(新ActorGetStureListener(){
公共无效着陆(InputEvent事件、浮点x、浮点y、整数计数、整数按钮){
如果(selectedDeck.getItems().size>0){
tooltipCard=新的测试卡(game.cardFont,cardNameToCard.get(selectedeck.getSelected());
setWidth(Gdx.graphics.getWidth()/(7*scale));
tooltipCard.setHeight(Gdx.graphics.getHeight()/(3.3f*比例));
touch=viewport.unproject(touch.set(Gdx.input.getX(),Gdx.input.getY(),0));
setPosition(touch.x-tooltipCard.getWidth(),touch.y-tooltipCard.getHeight());
collectionStage.addActor(工具卡片);
}
}
公共无效修补(InputEvent事件、浮点x、浮点y、整数指针、整数按钮){
tooltipCard.remove();
}
});

如注释中所述,有两个选项:

  • 编辑参与者的绘制方法(如果需要显示非常简单的工具提示,请使用此选项)

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

  • 要获取坐标,可以使用:

    或相对于其中心:

    Vector2 v = foo.localToStageCoordinates(new Vector2(foo.getWidth()/2,foo.getHeight()/2));
    
    然后使用例如:
    bar.addAction(Actions.fadeIn(0.5f))
    条添加动作(动作淡出(0.5f))以显示/隐藏工具提示


    出于优化目的,您可以对屏幕上的所有foo实例重用bar-actor,只需在每次单击时重新调整其用途。这可能比为他们每个人创造一个完整的演员要便宜。但是,如果您甚至可以在触地/上触时创建和销毁它而不会出现任何问题。

    创建您自己的图像(foo),请使用flag覆盖该图像的绘制方法和绘制栏(纹理或标签)。更改触地法上的平面值。获得被点击演员的位置(
    foo
    ),然后将另一个演员(
    bar
    )添加到舞台上,并将其转换为被点击演员的大小(
    foo
    )的位置,这不是一个更好的主意吗?无需创建另一个演员,只有一个演员foo,bar只是foo的一部分,就像你演员的数据员一样。谢谢。我已经实现了我想要的,通过获取触摸的位置,取消投影,并将
    条添加到舞台的该位置(在触摸时),然后在触摸时将演员从舞台上移除。但是
    foo
    实际上是
    字符串的
    列表
    ,我希望在单击字符串时出现
    bar
    ,问题是,当我单击没有字符串的列表时,它将显示所选
    字符串
    bar
    ,因此
    bar
    不会精确显示在它应该显示的位置。我怎样才能知道绳子的位置?(localToStageCoordinates仅适用于演员)我看不出字符串是如何成为演员的。你是说标签吗?请加上你实际使用的代码,让我更好地理解你的意思。添加屏幕截图/绘图也会有所帮助。添加了我使用的代码。我想一个解决方案是从一个列表切换到另一个列表?是的,因为您需要添加到某个阶段的参与者来使用该阶段的输入侦听器。不确定如何将Listener添加到字符串列表中。您可以将Listener添加到
    列表中,因为它是一个小部件(列表框),并且可以检测在其上发生的事件。
    
    Vector2 v = foo.localToStageCoordinates(new Vector2(foo.getWidth()/2,foo.getHeight()/2));