场景2D - 旋转的演员没有按预期平移

5
我曾在libgdx论坛上提出这个问题,但是没有得到回应,希望你能帮我解决:我有代表游戏棋子的演员。我想做的是让玩家可以通过点击和拖动瓷砖在屏幕上移动它并多次旋转它,然后才提交placeTile命令。从我对DragAndDrop的理解来看,它似乎并不是为我的用例而设计的,所以我想给每个游戏棋子(下面是代码)附加一个dragListener监听器来代替它。它对于拖动非常有效,但是我无法弄清如何将“拖动开始前的最小距离”设置为0...但这不是我的主要问题(任何见解都会受到赞赏)
无论如何,当我旋转演员并试图拖动它时,就会出现大问题:在30度旋转时,拖动几乎像平常一样:在60度时,鼠标的微小移动会使演员以非常快的速度在一个紧密的圆中移动。另外30度,瓦片演员在1-2帧内就退出了屏幕,沿着一个宽弧线移动。如果演员顺时针旋转,则其运动也是顺时针的;逆时针旋转也是同样的模式。
看起来演员的平移考虑到了旋转;我的问题是,有没有可能旋转Actor/Group而不影响将来的平移?或者,是否有更好的方法根据触摸/鼠标输入在屏幕上拖动Actor?下面是一些代码:我想我弄错了一些基本的东西,但我找不出来是什么:
// during initial stage creation
tileActor.setOrigin(tileActor.getWidth() / 2, tileActor.getHeight() / 2);
tileActor.addListener(new DragListener() {
        public void dragStart(InputEvent event, float x, float y,
              int pointer) {
           chosenTileActor = event.getTarget();

        }

        public void drag(InputEvent event, float x, float y, int pointer) {            
           Actor target = event.getTarget();               
           target.translate(x, y);
        }

     });

对于通过滚动鼠标轮进行旋转的监听器:

multiplexer.addProcessor(new InputAdapter() {
     @Override
     public boolean scrolled(int amt) {
        if (chosenTileActor == null)
           return false;
        else
           chosenTileActor.rotate(amt * 30);
        return true;

     }
  });

有什么建议吗?使用DragListener是不是正确的方向?
谢谢阅读!
1个回答

7

不要进行翻译,直接将演员的位置设置为您拖动事件的舞台坐标:

tileActor.addListener(new DragListener() {
  private float offsetX, offsetY;

  @Override
  public void dragStart(InputEvent event, float x, float y, int pointer) {
    Actor target = event.getTarget();
    this.offsetX = event.getStageX() - target.getX();
    this.offsetY = event.getStageY() - target.getY();
  }

  @Override
  public void drag(InputEvent event, float x, float y, int pointer) {
    event.getTarget().setPosition(event.getStageX() - offsetX, event.getStageY() - offsetY);
  }
});

我正在计算dragStart中的偏移量,以便演员在我开始拖动时不会立即跳到我单击的任何位置(使拖动相对于我的鼠标)。测试过,它适用于任何旋转角度。


看一下 setTapSquareSize 方法。如果你想的话,将其设置为 0F。 - Alexmelyon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接