首页 > 解决方案 > Libgdx:GestureListener - 平移无法正常工作

问题描述

我是 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;
        }
}

圆圈没有跟随手指的移动,有时它们会移动一点,但与触摸移动的 y 方向相反。

标签: libgdxscreenpangesturedetectorgesturelistener

解决方案


推荐阅读