libgdx ActorGestureListener.pan()参数不能平滑地移动actor

时间:2013-12-19 22:33:57

标签: java libgdx drag

我覆盖pan中的ActorGestureListener方法,以在libgdx(scene2d)中实现拖动actor。

当我在棋盘上移动单个棋子时,它们会平滑移动,但是当移动整个棋盘时,发送到平移的x和y坐标是“跳跃”,并且越来越多的拖动时间越长。

这是在向下平滑拖动时发送到平移的deltaY坐标的示例:

 1.1156368
-0.13125038
-1.0500145
 0.98439217
-1.0500202
 0.91877174
-0.984396
 0.9187679
-0.98439026
 0.9187641
-0.13125038

这就是我移动相机的方式:

public void pan (InputEvent event, float x, float y, float deltaX, float deltaY) {
    cam.translate(-deltaX, -deltaY);

我一直在使用发送到pan的delta值和实际位置值,但结果相似。由于坐标是错误的,无论我是移动电路板本身还是相机都无关紧要。

原因是什么,解决方案是什么?

修改

当我移动相机只有delta值的一半时,它会平滑移动,但速度只有鼠标指针的一半:

cam.translate(-deltaX / 2, -deltaY / 2);

看起来相机或纸板的移动会影响鼠标输入坐标。如何以“鼠标速度”拖动并仍能获得平稳的动作?

2 个答案:

答案 0 :(得分:1)

我知道这已经很晚了,你可能已经解决了这个问题但是对于未来的读者:

此论坛帖子帮助了我:http://badlogicgames.com/forum/viewtopic.php?f=11&t=12343

如果您在通过平移或任意手势的一部分移动相机时,用于x和y坐标的坐标系统会发生变化,这就是为什么您在+ ve和-ve值之间交替跳跃的增量。

我使用的修复是不使用pan()手势并像这样实现它:

 insert into customer (id, name) values (1, 'іван');

cqlshprivate Vector3 prevDragPos; addListener(new InputListener(){ @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { return true; } @Override public void touchDragged(InputEvent event, float x, float y, int pointer) { x = Gdx.input.getX(pointer); y = Gdx.input.getY(pointer); if(prevDragPos == null) prevDragPos = new Vector3(x, y, 0); getStage().getCamera().position.add(prevDragPos.x - x, y - prevDragPos.y, 0); prevDragPos.set(x, y, 0); } @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { prevDragPos = null ; } }); 未转换为相机坐标,因此使用它们可以解决问题。

答案 1 :(得分:0)

这是因为你正在使用翻译。试试这个:

public void pan (InputEvent event, float x, float y, float deltaX, float deltaY) {
    camera.position.add((-x), (y), 0);
    camera.update();
}