Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Libgdx双指平移而不是单指平移?_Java_Android_Libgdx_Gesture_Pan - Fatal编程技术网

Java Libgdx双指平移而不是单指平移?

Java Libgdx双指平移而不是单指平移?,java,android,libgdx,gesture,pan,Java,Android,Libgdx,Gesture,Pan,我已经为不同的功能(选择器)覆盖了LibGdx平移手势方法。但是,我希望平移功能改为使用两个手指(指针)。这可能吗 这与本文的问题相同,但他的问题是针对iPhone的,而不是针对LibGdx的: pan()方法只能用一个手指而不是两个手指触发。我想通过使用int-pointer变量在touchtdown()中设置一个变量来跟踪使用的手指数,但是当有2个手指在使用时,pan()方法将不会触发 有什么建议吗?干杯我尝试使用pinch()方法来计算一个组合的双指平移和缩放手势,而不是使用zoom()

我已经为不同的功能(选择器)覆盖了LibGdx平移手势方法。但是,我希望平移功能改为使用两个手指(指针)。这可能吗

这与本文的问题相同,但他的问题是针对iPhone的,而不是针对LibGdx的:

pan()方法只能用一个手指而不是两个手指触发。我想通过使用int-pointer变量在touchtdown()中设置一个变量来跟踪使用的手指数,但是当有2个手指在使用时,pan()方法将不会触发


有什么建议吗?干杯

我尝试使用
pinch()
方法来计算一个组合的双指平移和缩放手势,而不是使用
zoom()

以下是一些代码,它使用
pinch
方法来实现这一点,通过查看第一个手指从其初始位置拖动的距离。第二个手指被忽略

Gdx.input.setInputProcessor(new GestureDetector(new GestureDetector.GestureAdapter() {
    @Override
    public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) {
        float panAmount = pointer1.x - initialPointer1.x;
        // ...
        return true;
    }
})));

经过3年多的研究,我终于成功了

@Override
public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) {
    // Calculate distances
    float initialDistance = initialPointer1.dst(initialPointer2);
    float distance = pointer1.dst(pointer2);
    // Calculate pinch coordinates
    float initialPinchX = (initialPointer1.x + initialPointer2.x) / 2;
    float initialPinchY = (initialPointer1.y + initialPointer2.y) / 2;
    float pinchX = (pointer1.x + pointer2.x) / 2;
    float pinchY = (pointer1.y + pointer2.y) / 2;
    // This to avoid first time zooming or panning horrible behavior
    if (lastZoomDistance == 0) {
        lastZoomDistance = initialDistance;
    }
    if (lastPinchX == lastPinchY && lastPinchX == 0) {
        lastPinchX = initialPinchX;
        lastPinchY = initialPinchY;
    }
    // Zoom
    float distanceDifference = distance - lastZoomDistance;
    camera.zoom -= distanceDifference / 300;
    // Pan
    float deltaX = (pinchX - lastPinchX) * camera.zoom;
    float deltaY = (pinchY - lastPinchY) * camera.zoom;
    camera.translate(-deltaX, deltaY);
    // We need to update these for future calculations
    lastZoomDistance = distance;
    lastPinchX = (pointer1.x + pointer2.x) / 2;
    lastPinchY = (pointer1.y + pointer2.y) / 2;
    return false;
}