我想在屏幕上使用一个按钮。但是,当我调整桌面窗口的大小时,触摸坐标会自行搞定。我不知道如何解决这个问题。
首先,我正在使用
cam = new PerspectiveCamera();
viewport = new FitViewport(screenWidth, screenHeight, cam);
并致电
viewport.update(width, height, true);
在我的调整大小方法中,以便我的屏幕看起来总是与其原始大小成比例缩放。
我的输入
Gdx.input.setInputProcessor(new InputHandler((float) scaleX, (float) scaleY, world));
现在,在调整窗口大小后,图像位于正确的位置,但触摸坐标不是。这有点难以解释,但我会尽我所能。规模正常。但是,由于我正在使用Fitviewport,当我调用Gdx.graphics.getHeights()或.getWidth()时,它会获得整个屏幕的高度和宽度(包括仅增加一侧时的黑色区域)。因此,这使我的输入比例与整个屏幕成比例。虽然图像是通过Fitviewport进行说明的,并且与其原始大小成比例地调整大小。这使得我的输入位置与按钮绘制的图像相比,按钮响应距离或向右或向上或向下太远。 我也试过了cam.unproject。我该如何解决这个问题?
我提供了一些日志,希望它能帮助您更好地了解我的情况。
---没有调整大小(原创)---
调整大小称为
调整大小x:480 y:800
比例x:1.0 y:1.0
(按钮原来的坐标和按钮响应输入的位置)
在缩放X之前:398 Y:75
缩放X后:398 Y:75
Gdx输入X:398 Y:75
cam unproject X:240.26144 Y:400.53613
---调整大小后---
调整大小称为
调整大小x:807 y:743
比例x:1.68125 y:0.92875
-where按钮出现在屏幕上 -
在缩放X之前:542 Y:38
缩放X后:322 Y:40
Gdx输入X:542 Y:38
cam unproject X:240.13632 Y:400.5924
-touch坐标,按钮响应 -
在缩放X之前:677 Y:36
缩放X后:402 Y:38
Gdx输入X:677 Y:36
cam unproject X:240.2692 Y:400.59595
谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
我有一个非常相似的问题。
在我的touchDown
方法中,我翻译了世界坐标:
Vector3 testPoint3 = new Vector3();
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
testPoint3.set(screenX, screenY, 0);
camera.unproject(testPoint3);
testPoint.set(testPoint3.x * GameWorld.BOX_TO_WORLD, testPoint3.y * GameWorld.BOX_TO_WORLD);
//And then check the Fixture
if(myFixture.testPoint(testPoint.x, testPoint.y)) {
System.out,println("hit");
}
}
但正如你所说,相机的宽度和高度是整个屏幕的宽度和高度。因此,您需要使用Viewport取消项目。
viewport.unproject(testPoint3)
GameWorld.BOX_TO_WORLD
在我的情况下是0.01f,因为我选择1米= 100px。