我正在制作一个采矿游戏,如果你点击某个地方,你将删除那里的街区。现在所有的块都只是正方形,只有在我的2d布尔数组中的点为真时才会绘制。所以我试图采取这个立场并将其设置为假,只要你点击这里就是我的inputprocessor
的触地得分方法
private Vector2 tmp = new Vector2();
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
tmp.x = screenX / MapGrid.CELL_SIZE;
tmp.y = screenY / MapGrid.CELL_SIZE;
cam.unproject(new Vector3(tmp.x, tmp.y, 0));
grid.manipulateGrid((int)(tmp.x), (int)(tmp.y), false);
System.out.println("Clicked at: (" + tmp.x + ", " + tmp.y +")");
return false;
}
我也正在将相机转换为我的球员位置。 grid.manipulateGrid
采用x和y并将其设置为false。我的播放器位于(10,126)网格坐标中,当我点击他旁边时,它说我点击了(35,24)我不确定我是否正在这样做,但我一直在寻找到处都可以&找不到解决方案。我发现了类似但没有结果的问题。如果有人可以告诉我如何将点击调整到播放器的坐标,我将非常感激。
答案 0 :(得分:2)
绘图的坐标与输入的坐标不同。 LibGDX中输入的坐标从左上角开始为(0,0),一般是您绘制的世界坐标,以及从左下角开始的所有坐标。所以你需要做一些事情:
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
tmp.x = screenX / MapGrid.CELL_SIZE;
tmp.y = (Gdx.graphics.getHeight() - screenY)/ MapGrid.CELL_SIZE;
cam.unproject(new Vector3(tmp.x, tmp.y, 0));
grid.manipulateGrid((int)(tmp.x), (int)(tmp.y), false);
System.out.println("Clicked at: (" + tmp.x + ", " + tmp.y +")");
return false;
}
欲了解更多信息,请阅读: https://gamedev.stackexchange.com/questions/103145/libgdx-input-y-axis-flipped
答案 1 :(得分:2)
你必须在取消投影后划分mapgrid
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
tmp.x = screenX;
tmp.y = (Gdx.graphics.getHeight() - screenY);
tmp.z = 0;
cam.unproject(tmp);
grid.manipulateGrid((int)(tmp.x) / MapGrid.CELL_SIZE, (int)(tmp.y) / MapGrid.CELL_SIZE, false);
System.out.println("Clicked at: (" + tmp.x / MapGrid.CELL_SIZE + ", " + tmp.y / MapGrid.CELL_SIZE +")");
return false;
}