【问题标题】:Setting position before button is pressed Libgdx按下按钮之前设置位置Libgdx
【发布时间】:2016-03-27 21:11:23
【问题描述】:

在我的 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));
}

在我的 render() 中

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

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

【问题讨论】:

    标签: libgdx drag-and-drop actor clicklistener


    【解决方案1】:

    您是正确的,因为您需要使用localToStageCoordinates 方法来获取演员在表格中的舞台位置,并且该方法直到之后才会产生所需的结果舞台/桌子至少被渲染过一次,也就是设置表格元素坐标的时候。

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

    【讨论】:

      【解决方案2】:

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

      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 来提供正在渲染纹理的位置的坐标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2016-12-31
        相关资源
        最近更新 更多