在按下按钮之前设置位置Libgdx

时间:2015-12-21 17:59:22

标签: libgdx drag-and-drop actor clicklistener

在我的create()方法中,我创建了一个表并插入了一些按钮,如下图所示。

http://www2.pic-upload.de/thumb/29190899/Unbenannt.png

每次用户按下按钮时,手指/按钮位置下方都会出现一个新的可拖动纹理。

我尝试了以下内容:

sourceImage.addListener(controller);
testbutton.get(2).addListener(new ClickListener() {
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int    pointer, int button) {
            sourceImage.setVisible(true);
            sourceImage.setPosition(vec.x, vec.y);
            return super.touchDown(event, x, y, pointer, button);
        }

    });

这很好用,但我想这样做,以便用户在他的手指上获得纹理,而不必再次按下它来拖动它。

所以我尝试在触摸开始之前将图像放到按钮上。

问题是,我无法得到表格按钮的位置,因为表格将在应用程序启动后呈现,而不是在create()中如果我错了则更正。

当我尝试在create()

中获取实际表位置时,它返回0,0

我在论坛中找到了一个解决方案: Getting Stage coordinates of Actor in Table in libGDX

   public static Vector2 getStageLocation(Actor actor) {
    return actor.localToStageCoordinates(new Vector2(0, 0));
}

和我的渲染()

vec = getStageLocation(testbutton.get(2));

它给了我表中按钮的正确位置,但我不知道在按下按钮之前我必须在何时何地设置纹理的位置?

2 个答案:

答案 0 :(得分:0)

您应该添加一个输入处理程序:

Gdx.input.setInputProcessor( new InputHandler());

然后在你的新班级

     @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {

        return true;
    }
 @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        return false;
    }
 @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
    rendrerWhatever.drawTextures(screenX, screenY);

        return false;
    }

每次更改按住单击(触摸)的位置时都会调用touchDragged函数,您可以使用其screenX和screenY来提供纹理渲染位置的坐标。

答案 1 :(得分:0)

你是正确的,因为你需要使用localToStageCoordinates方法来获取表格中演员的舞台位置,并且这个方法在之后不会产生所需的结果舞台/表格至少渲染一次,即设置表格元素的坐标时。

一种可能的方法是在添加所有表元素之后,在create方法中提前一次渲染屏幕。您可以致电render(0)(如果您正在扩展GameScreen类),或者调用包含您的表格的draw方法。在此之后,localToStageCoordinates应该为您提供所需的值,并且您可以继续执行create方法任务。