libgdx: 使用纹理时的其他坐标系
libgdx: Other coordinatesystem when using textures
我有点困惑。我是第一次使用 libgdx,我在坐标系方面遇到了一些问题。当我创建纹理并想要设置位置时,我会这样做:
texture = new Texture("myGraphic.png", 0, 0);
我的图片将位于左下角。
但是当我尝试通过以下方式获得触摸位置时:
if(Gdx.input.isTouched())
{
Vector3 tmp = new Vector3(Gdx.input.getX(),Gdx.input.getY(),0);
System.out.println("Coord:" + " + " + tmp.x + " + " + tmp.y);
}
我认出 (0,0) 在左上角。
所以我在输出之前尝试了 camera.unproject(tmp) ,但是我只会得到 -1 和 1 之间的值。
我如何为所有元素获得相同的坐标系?
在 Libgdx 中,触摸的坐标系是 y-down
,但对于屏幕或图像,它是 y-up
。
看看LibGDXCoordinate systems
如果可以使用相机,通过camera.setToOrtho(false);
设置y轴指向上,通过camera.unproject(vector3);
方法获取世界点。
public class TouchSystem extends ApplicationAdapter {
SpriteBatch batch;
Texture texture;
Vector3 vector3;
OrthographicCamera camera;
@Override
public void create() {
batch=new SpriteBatch();
texture=new Texture("badlogic.jpg");
vector3=new Vector3();
camera=new OrthographicCamera();
camera.setToOrtho(false); // this will set screen resolution as viewport
}
@Override
public void render() {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(texture,0,0);
batch.end();
if(Gdx.input.justTouched()) {
vector3.set(Gdx.input.getX(),Gdx.input.getY(),0);
camera.unproject(vector3);
System.out.println("Coord:" + " + " + vector3.x + " + " + vector3.y);
}
}
@Override
public void dispose() {
texture.dispose();
batch.dispose();
}
}
我有点困惑。我是第一次使用 libgdx,我在坐标系方面遇到了一些问题。当我创建纹理并想要设置位置时,我会这样做:
texture = new Texture("myGraphic.png", 0, 0);
我的图片将位于左下角。
但是当我尝试通过以下方式获得触摸位置时:
if(Gdx.input.isTouched())
{
Vector3 tmp = new Vector3(Gdx.input.getX(),Gdx.input.getY(),0);
System.out.println("Coord:" + " + " + tmp.x + " + " + tmp.y);
}
我认出 (0,0) 在左上角。 所以我在输出之前尝试了 camera.unproject(tmp) ,但是我只会得到 -1 和 1 之间的值。 我如何为所有元素获得相同的坐标系?
在 Libgdx 中,触摸的坐标系是 y-down
,但对于屏幕或图像,它是 y-up
。
看看LibGDXCoordinate systems
如果可以使用相机,通过camera.setToOrtho(false);
设置y轴指向上,通过camera.unproject(vector3);
方法获取世界点。
public class TouchSystem extends ApplicationAdapter {
SpriteBatch batch;
Texture texture;
Vector3 vector3;
OrthographicCamera camera;
@Override
public void create() {
batch=new SpriteBatch();
texture=new Texture("badlogic.jpg");
vector3=new Vector3();
camera=new OrthographicCamera();
camera.setToOrtho(false); // this will set screen resolution as viewport
}
@Override
public void render() {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(texture,0,0);
batch.end();
if(Gdx.input.justTouched()) {
vector3.set(Gdx.input.getX(),Gdx.input.getY(),0);
camera.unproject(vector3);
System.out.println("Coord:" + " + " + vector3.x + " + " + vector3.y);
}
}
@Override
public void dispose() {
texture.dispose();
batch.dispose();
}
}