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\$