java - Scene2d - 旋转 Actor 未按预期翻译

标签 java libgdx

我在 libgdx 论坛上问过这个问题,但没有得到回复,所以我希望大家能帮助我:

我有代表游戏片段的 Actor。我想要做的是让玩家可以单击并拖动图 block 以在屏幕上移动它并在提交 placeTile 命令之前多次旋转它。据我对 DragAndDrop 的了解,它的设计似乎并没有考虑到我的用例,所以我想我应该为每个游戏片段附加一个 dragListener 监听器(下面的代码)。它适用于拖动,除了我不知道如何将“拖动开始前的最小距离”设置为 0...但这不是我的主要问题(尽管有任何见解将不胜感激)

无论如何,当我旋转 actor 然后尝试拖动它时出现了大问题:旋转 30 度时,拖动几乎与正常情况一样:旋转 60 度时,鼠标的非常小的移动会使 actor 移动紧圈很快。再倾斜 30 度,瓦片 Actor 在 1-2 帧内退出屏幕,以宽弧线移动。如果 Actor 顺时针旋转,它的运动就是顺时针的;逆时针方向相同。

看来 Actor 的翻译考虑到了轮换;我想我的问题是,是否可以在不影响 future 翻译的情况下轮换 Actor /组?或者,是否有更好的方法根据触摸/鼠标输入在屏幕上拖动 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 朝着正确的方向前进吗?

感谢阅读!

最佳答案

无需平移,只需将 Actor 的位置直接设置为拖动事件的舞台坐标即可:

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 中的偏移量,这样 Actor 就不会在我开始拖动时立即跳到我点击的任何地方(使拖动相对于我的鼠标)。对此进行了测试,它适用于任何旋转。

关于java - Scene2d - 旋转 Actor 未按预期翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922667/

相关文章:

android - Google Play 游戏服务的登录问题

java - 将 JAX-RS/Jersey 与 Freemarker 模板一起使用

java - 按任意键继续不工作?

java - 从 MyBatis @Select 查询中捕获参数化字符串

java - 游戏屏幕显示黑屏

java - 如何让我的 LibGDX BitmapFont 进行绘制?

libgdx - Scene2d.ui 窗口的顶部颜色?

java - Libgdx某些字体字母不出现

Java 8 if else 与Optional 的示例

java - 从 java 运行 perl 脚本的问题