Libgdx上的光标输入“错误地”返回

时间:2014-03-30 21:39:24

标签: java swing input graphics libgdx

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

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);

相机是一张OrthographicCamera。 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) 以下是一些图片,以便您更好地了解问题所在。 Zoom at 1

Zoom at... further than 1 Zoom at 10

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

1 个答案:

答案 0 :(得分:4)

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

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

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