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触摸协调混乱的主要内容,如果未能解决你的问题,请参考以下文章

如何在(libgdx)阶段检测对图像透明区域的触摸?

Libgdx输入处理手势捕获

为啥 Libgdx 的 Table 不接受缩放动作?

libgdx - 检查身体是否接触

片段如何处理触摸?

android:当用户触摸片段外部时,我如何关闭片段?