LibGDX触摸协调混乱
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LibGDX触摸协调混乱相关的知识,希望对你有一定的参考价值。
据我所知,libGDX坐标系默认设置,所以(0,0)位于左下角,如下图所示:
img http://gyazo.com/0e1cd9e1f7c4ee39ea38549ff754ac78.png
是否可以让它像JFrame一样工作,默认位置在左上角?
无论如何,回到我的实际问题,android(或者至少是我的手机)触摸坐标系统全屏工作(当手机放在它的侧面时)所以默认(0,0)位置位于右上角,如下图所示:
img2 http://gyazo.com/733fb20b7ce8e842a03a57a7735161ed.png
那么当我这样做时会发生什么:
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
System.out.println("X: " + screenX + " Y: " + screenY);
this.instance.player.setLocation(screenX, screenY);
return false;
}
我只是得到触摸屏的X,Y(基于android的全屏坐标系)然后在libgdx坐标系上使用它,这是完全不同的,
所以,如果我触摸右上角,我的蓝色矩形将出现在左下角。
有没有办法让所有的东西都像PC一样在左上角工作?
您需要使用相机才能执行此操作。如果您不使用相机,我强烈建议您添加一个相机,因为这会让事情变得更容易。只需调用camera.setToOrtho(true)
,它将把LibGDX的坐标系切换到你想要的坐标系,左上角为(0,0)。
要使用除Gdx.graphics.getWidth / Height()之外的某个视口宽度和高度执行此操作,可以调用camera.setToOrtho(true, viewportWidth, viewportHeight)
。
我不知道如何在左上角设置它,但有一件事你可以将输入坐标转换为libgdx坐标。我希望这可以帮助你或帮助别人:
int Screen_height = Gdx.graphics.getHeight(); // Your screen height
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
System.out.println("X: " + screenX + " Y: " + (Screen_height - screenY));
this.instance.player.setLocation(screenX, (Screen_height - screenY));
return false;
}
是的,这很容易。您只需从Y值中减去屏幕的高度即可。所以:手指位置Y =屏幕高度 - 您找到的Y值。
有一种更简单的方法:只需进行减法
Gdx.graphics.getHeight()-screenY
正如您所看到的,只需要这行代码。
创建变量fingerY并使用减法:
fingerY= Gdx.graphics.getHeight()-screenY;
因此,如果screenY等于左下角10,并且屏幕高度等于240像素:
fingerY=240-10
然后,fingerY =左下角的230像素,距离左上角10个像素。
你需要在类project(Vector3 worldCoords)
中使用方法com.badlogic.gdx.graphics.Camera
。
private Camera camera;
............
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
创建向量的实例并使用输入事件处理程序的坐标对其进行初始化。
Vector3 worldCoors = new Vector3(screenX, screenY, 0);
将世界空间中给出的worldCoors投影到屏幕坐标。
camera.project(worldCoors);
使用投影坐标。
world.hitPoint((int) worldCoors.x, (int) worldCoors.y);
OnTouch();
return true;
}
以上是关于LibGDX触摸协调混乱的主要内容,如果未能解决你的问题,请参考以下文章