I know this has been asked many times but my question doesn't quite fit the others. I have an IsometricTiledMap and I need to get the tile under a set of screen X and Y coordinates. Here is a picture of my game:
I need to get the tile that the player is standing on. I need to convert screen coordinates to isometric tile coordinates and the way that seemed the easiest was by using a matrix as described here: http://www.alcove-games.com/advanced-tutorials/isometric-tile-picking/#comment-56390
Unfortunately I have no idea how to change that code to fit a 128x64 tile instead of a 1.0x.5 tile. Here is my code
isoTransform = new Matrix4(); isoTransform.idt(); isoTransform.translate(0.0f, 32f, 0.0f); isoTransform.scale((float) (Math.sqrt(2.0) / 2.0), (float) (Math.sqrt(2.0) / 4.0), 1.0f); isoTransform.rotate(0.0f, 0.0f, 1.0f, -45.0f); invIsotransform = new Matrix4(isoTransform.inv()); //touch vector touch = new Vector3(); @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { touch.set(screenX, screenY, 0); touch = gameCamera.unproject(touch); touch.mul(invIsotransform); pickedTileX = (int)touch.x / 64; pickedTileY = (int)touch.y / 32; debug(touch.x + " " + touch.y); debug(pickedTileX + " " + pickedTileY); return false; } I think the problem is in this line isoTransform.scale((float) (Math.sqrt(2.0) / 2.0), (float) (Math.sqrt(2.0) / 4.0), 1.0f); but I'm not sure what to change.
camera.unproject()is for converting pixel coordinates to game world coordinates. Not really the same as what I am trying to do. Unless you are saying that is why 0, 0 is in the wrong place in my game. Can you explain what you mean? \$\endgroup\$