我在 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 走向正确的方向吗?
谢谢阅读!