我覆盖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);
看起来相机或纸板的移动会影响鼠标输入坐标。如何以“鼠标速度”拖动并仍能获得平稳的动作?
答案 0 :(得分:1)
我知道这已经很晚了,你可能已经解决了这个问题但是对于未来的读者:
此论坛帖子帮助了我:http://badlogicgames.com/forum/viewtopic.php?f=11&t=12343
如果您在通过平移或任意手势的一部分移动相机时,用于x和y坐标的坐标系统会发生变化,这就是为什么您在+ ve和-ve值之间交替跳跃的增量。
我使用的修复是不使用pan()手势并像这样实现它:
insert into customer (id, name) values (1, 'іван');
cqlsh
和private 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();
}