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