Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX触摸协调混淆_Java_Android_Libgdx - Fatal编程技术网

Java LibGDX触摸协调混淆

Java LibGDX触摸协调混淆,java,android,libgdx,Java,Android,Libgdx,据我所知,libGDX坐标系默认设置,因此(0,0)位于左下角,如下图所示: (来源:) 有没有可能让它像JFrame一样工作,默认位置在左上角 无论如何,回到我的实际问题,android(或至少是我的手机)触摸坐标系是全屏工作的(当手机放在它的侧面时),所以默认(0,0)位置位于右上角,如下图所示: (来源:) 那么当我这么做的时候会发生什么呢: @Override public boolean touchDown(int screenX, int screenY, int pointer

据我所知,libGDX坐标系默认设置,因此(0,0)位于左下角,如下图所示:


(来源:)

有没有可能让它像JFrame一样工作,默认位置在左上角

无论如何,回到我的实际问题,android(或至少是我的手机)触摸坐标系是全屏工作的(当手机放在它的侧面时),所以默认(0,0)位置位于右上角,如下图所示:


(来源:)

那么当我这么做的时候会发生什么呢:

@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坐标系上使用它

因此,如果我在右上角触摸,我的蓝色矩形将出现在左下角


有没有办法让电脑左上角的所有东西都像电脑一样工作?

你需要用相机来完成这项工作。如果你不使用相机,我强烈建议你加上一个,因为它会让事情变得容易得多。只需调用
camera.setToOrTo(true)
,即可将LibGDX的坐标系切换到左上角所需的坐标系(0,0)


要使用Gdx.graphics.getWidth/height()中获得的不同的特定视口宽度和高度执行此操作,可以调用
camera.setToOrTo(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;
}

您需要在class
com.badlogic.gdx.graphics.Camera
中使用方法
project(Vector3 worldCoords)

private Camera camera;
............

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
创建向量的实例,并使用输入事件处理程序的坐标对其进行初始化

    Vector3 worldCoors = new Vector3(screenX, screenY, 0);
将世界空间中给定的世界坐标投影到屏幕坐标

    camera.project(worldCoors);
    world.hitPoint((int) worldCoors.x, (int) worldCoors.y);

    OnTouch();

    return true;
}
使用投影坐标

    camera.project(worldCoors);
    world.hitPoint((int) worldCoors.x, (int) worldCoors.y);

    OnTouch();

    return true;
}
是的,而且很容易。 你只需要从Y值中减去屏幕的高度。 因此: 手指位置Y=屏幕高度-您找到的Y值。

有一种更简单的方法: 只需大声喊减法

Gdx.graphics.getHeight()-screenY

正如您所见,只有这行代码是必需的。

创建变量fingerY并使用减法:

fingerY= Gdx.graphics.getHeight()-screenY;
因此,如果从左下角算起screenY等于10,屏幕高度等于240像素:

fingerY=240-10

然后从左下角开始fingerY=230像素,而从左上角开始fingerY=10像素。

您也在使用相机绘制所有内容吗?请确保将SpriteBatch的投影矩阵设置为camera.combined。您需要随代码一起提供一些信息希望它对您有所帮助很抱歉,各位,我写了很多次同样的事情,因为Stackoverflow应用程序中出现错误,没有显示我发布的答案。。。很抱歉