Libgdx: GestureListener - панорамирование не работает должным образом - PullRequest
0 голосов
/ 09 января 2019

Я новичок в libgdx и пытаюсь переместить круг, перетаскивая его. Но он не работает должным образом.

класс замедления выглядит следующим образом -

public class gScreen1 extends ScreenAdapter
implements GestureDetector.GestureListener {

private static final float WORLD_WIDTH = 640;
private static final float WORLD_HEIGHT = 480;
 ...
 @Override
 public void show() {
    super.show();
    camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.position.set(WORLD_WIDTH / 2, WORLD_HEIGHT / 2, 0);
    camera.update();
    viewport = new FitViewport(WORLD_WIDTH, WORLD_HEIGHT, camera);
    shapeRenderer = new ShapeRenderer();
    batch = new SpriteBatch();
    }
private void drawGrid() {
    Gdx.gl.glLineWidth(2);
    shapeRenderer.setProjectionMatrix(camera.projection);
    shapeRenderer.setTransformMatrix(camera.view);
    shapeRenderer.setColor(Color.YELLOW);
    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
    size = points.length;
    for (int i = 0; i < size; i++) {

        shapeRenderer.circle(pointsr[i].x , pointsr[i].y ,10);
    }

    shapeRenderer.end();

}
 @Override
 public void render(float delta) {
    super.render(delta);
    clearScreen();
    drawGrid();
}
@Override
public boolean pan(float x1, float y1, float deltaX, float deltaY) {

    Vector3 tmpCoords = new Vector3(x1,y1, 0);
    camera.unproject(tmpCoords);
    int x = (int)tmpCoords.x;
    int y = (int)tmpCoords.y;


    for( i = 0; i < size ; i++) {
        int x2 = pointsr[i].x;
        int y2 = pointsr[i].y;

        if( ((x2 -x)*(x2 -x) + (y2 -y)*(y2 -y) ) < 400 )
        break;
    }
        if( i < size ) {
            pointsr[i].x += deltaX;
            pointsr[i].y += deltaY;
        }
}

Круги не следуют за движением пальца, иногда они немного двигаются, но в противоположном направлении от движения касания.

...