【问题标题】:touch position not correct after resizing libGDX调整 libGDX 大小后触摸位置不正确
【发布时间】:2014-08-09 19:35:04
【问题描述】:

我有一个我想在我的屏幕上使用的按钮。但是,当我调整桌面窗口的大小时,触摸坐标本身就会混乱。我不知道如何解决这个问题。

所以首先我正在使用

cam = new PerspectiveCamera();
viewport = new FitViewport(screenWidth, screenHeight, cam);

被叫

viewport.update(width, height, true);

在我的 resize 方法中,我的屏幕看起来总是与其原始大小成正比。

我的意见

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

-按钮出现在屏幕上的位置-

缩放前 X : 542 Y : 38
缩放后 X : 322 Y : 40
Gdx 输入 X : 542 Y : 38
凸轮取消项目 X:240.13632 Y:400.5924

-按钮响应的触摸坐标-

缩放前 X : 677 Y : 36
缩放后 X : 402 Y : 38
Gdx 输入 X : 677 Y : 36
凸轮取消项目 X:240.2692 Y:400.59595

谢谢!

【问题讨论】:

  • 从更新中删除true
  • @noone nope.. 不起作用
  • 等等……你说的是按钮,但你有一个PerspectiveCamera,嗯??
  • @noone 是的,我有一个透视相机,因为即使我调整窗口大小,我也希望我的屏幕看起来缩放到原来的大小。如果你有更好的主意,请帮助我 =(我展示了我有一个透视相机是因为我认为这就是导致我的体重秤变得古怪的问题
  • 不要使用 PerspectiveCamera,使用 OrthographicCamera 和 UI。即使这样,您也可以“缩放”。但是要针对不同的屏幕尺寸调整大小,您应该使用Viewport

标签: java android libgdx


【解决方案1】:

我终于找到了我的问题的解决方案。 问题是我不知道浮点除法。

link。我需要划分浮点数/整数。这个浮动划分很好解释

谢谢大家的帮助

【讨论】:

  • 请发布您修改后的代码..,我也有同样的问题
  • @salihkallai 没什么可发的。只是当您使用 float 和 int 进行操作时,float 被强制转换为 int,因此返回类型将是 int。这使值失去了精度。例如)浮点 + int = int :)
【解决方案2】:

我有一个非常相似的问题。 在我的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.unproject(testPoint3)

GameWorld.BOX_TO_WORLDist 0.01f 在我的例子中,因为我选择 1 米 = 100px。

【讨论】:

  • 我刚刚注意到,这是一个非常古老的问题:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多