移动形状到触摸手指的位置

时间:2019-10-13 04:07:49

标签: java android libgdx

@Override
public void create()
{

    batch = new SpriteBatch();

    shape = new ShapeRenderer();
    velocity = new Vector2(100, 0);
    position = new Rectangle(0, 5, 100, 100);

    font = new BitmapFont();
    font.setColor(Color.BLACK);
    font.getData().scale(3f);

    camera = new OrthographicCamera();
    confCamera();

}

@Override
public void render()
{        

       if(Gdx.input.isTouched())
        position.x = Gdx.input.getX() - position.width/2;
        position.y = (Gdx.input.getY()  - position.height/2);

    shape.begin(ShapeRenderer.ShapeType.Filled);

    shape.setColor(Color.BLACK);
    shape.rect(position.x, position.y, position.width, position.height);

    shape.end();
}

这是一个简单的代码,但是我并不是不理解Y轴,我的形状像镜子一样运动。如果我触摸顶部,我的形状将移至底部。如果我触摸底部,则形状将移至顶部。如何解决?

1 个答案:

答案 0 :(得分:0)

用于渲染的LibGDX(默认情况下)使用坐标系,其中0位于屏幕底部,并且越向上,Y坐标就越大。

此外,当您读取输入坐标(触摸,移动...)时,您将获得屏幕坐标,但是在渲染图形时,您将使用“世界”坐标。它们处于2个不同的坐标系中,因此要从屏幕转换为世界,您必须使用camera.unproject()调用。应该是这样的:

Vector3 touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPos);

,然后使用touchPos.xtouchPos.y

这里会问类似的问题,以便您可以在此处找到更多答案:

Using unProject correctly in Java Libgdx