【发布时间】: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