【问题标题】:Cursor Input on Libgdx is returned "incorrectly"Libgdx 上的光标输入“错误”返回
【发布时间】:2014-03-30 21:39:23
【问题描述】:

我目前正在为我即将开展的项目制作我自己的关卡创建器(平铺地图)。一切都很好,除了我在添加放大和缩小选项时遇到了问题。我有一个类正在处理当前的所有输入和渲染,因为我才刚刚开始。

LevelEditorController extends InputAdapter implements ApplicationListener

如您所见,该类扩展了 InputAdapter 并实现了 ApplicationListener。

cameraHelper = new CameraHelper();
camera = new OrthographicCamera(Constants.VIEWPORT_WIDTH,
        Constants.VIEWPORT_HEIGHT);
camera.position.set(0f, Constants.VIEWPORT_HEIGHT / 2, 1f);
camera.update();
cameraHelper.setPosition(camera.position.x, camera.position.y,
                camera.position.z);

相机是正交相机。 cameraHelper 是我制作的一个助手类。我在这里设置了相机的位置。 cameraHelper.setPosition(...) 只是在我的 CameraHelper 类中设置一个 Vertice3。

batch.setProjectionMatrix(camera.combined);
shapeRenderer.setProjectionMatrix(camera.combined);

上面,在重写的渲染方法中,我设置了我的批处理和shapeRenderer的项目矩阵。

我相信所有这些都有效,因为所有内容都正确显示,并且只有光标位置处于关闭状态。

@Override
        public boolean mouseMoved(int x, int y) {
            for (int i = 0; i < boundingBoxes.size; i++) {
                if (boundingBoxes.get(i).toRectangle()
                        .contains(x, Gdx.graphics.getHeight() - y)
                        && !boundingBoxes.get(i).isActive()) {
                    boundingBoxes.get(i).setRenderFull(true);
                } else {
                    boundingBoxes.get(i).setRenderFull(false);
                }
            }
            shapeRenderer.begin(ShapeType.Filled);
            shapeRenderer.setColor(0.53f, 0.62f, 0.32f, 1f);
            shapeRenderer.circle(x, Gdx.graphics.getHeight() - y, 20);
            shapeRenderer.end();
            return false;
        }

这就是我的问题所在。在上述方法中,我只是检查光标位置是否与其中一个网格正方形相交。如果是这样,我将网格正方形设为“renderFull”,它会渲染一个不同颜色的完整(填充)矩形。同样在这种方法中,我画了一个圆圈,表示当前光标指针所在的位置。这就是我的问题所在。当我运行我的程序时,圆圈不在我的光标所在的位置。我花了大约一个小时调试并试图提出一些基于缩放的算法来正确对齐它,但无济于事。无论缩放如何,有没有办法获得光标的正确位置?而且,这可能是我遇到的一个问题,我的“世界”大小(网格)大约有 10000 像素长。光标位置是否也会随之移动,还是会保持在实际程序/Jframe 的大小内?如果是这样,我可以通过任何方式解决这个问题(我想这就像将相机的位置添加到光标位置一样简单,但只是想检查以防万一。:D) 这里有一些图片,以便您更好地了解问题所在。

感谢任何帮助。谢谢! :)

【问题讨论】:

  • CabPanel 可能会提供一些见解。

标签: java swing input graphics libgdx


【解决方案1】:

您必须将输入点取消投影到相机使用的坐标系中。

touchMoved(int x, int y) 将仅包含屏幕上的像素位置。通过使用camera.unproject(Vector3 window),您将在您的世界/场景坐标中获得这些触摸坐标。

这样,触摸位置应该匹配。希望对您有所帮助... :)

【讨论】:

  • 谢谢!我应该知道的。除了在 3d 空间中,我只是做了同样的事情。不幸的是,我的笔记本电脑进水了。好像硬盘被炸了。 ?
  • 那么我绝对建议将项目备份到 Github、Bitbucket 或您自己的服务器上以供将来的项目使用... ;) 很高兴我能提供帮助...
  • 是的,从现在开始我肯定会保留备份。 ? 我丢失了所有项目,但幸运的是,唯一重要的项目已被压缩并上传。 ? 但是,我会想念我所有的笔记和个人文件。我要抓住这个机会,从一个新的开始。:)
猜你喜欢
  • 2021-08-23
  • 2015-02-17
  • 2013-02-27
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多