• Advertisement

# PaulDurbaba

Member

3

100 Neutral

• Rank
Newbie
1. ## Get the Mouse Position on isometric grid.

I'm having trouble with finding the mouse coordinates on my isometric game. The games tiles are sent to openGL in 2d form, but rotated into isometric: (before rotation)[img]http://i.imgur.com/h0QCa.png[/img] (after rotation):[img]http://i.imgur.com/emkpZ.png[/img] I have access to the current player's x and y coords, the size of the tiles (128x128) the approximate render size of the tile (180x90) and the position of the mouse. I think this may be to do with the coordinate system I use as I have seen this image: [img]http://i.imgur.com/G1wYz.png[/img]| reckon the code I use to calculate the mouse position uses that system. Here is the code to get the position: (I have coded in two methods, so I will show both) [CODE] public class IsometricPointSystem { public static Vector2f pixelToIso(Vector2f pixel, int camX, int camY){ //return _pixelToIsoAlgebra(pixel, camX, camY); return _pixelToIsoColor(pixel, camX, camY); } protected static Vector2f _pixelToIsoAlgebra(Vector2f pixel, int camX, int camY){ Vector2f cam = cameraCalc(camX, camY); int x = (int) (pixel.x + cam.x); int y = (int) (pixel.y + cam.y); int tileWidth = Tile.TILE_ISO_WIDTH; int tileHeight = Tile.TILE_ISO_HEIGHT; //int tileWidth = 128; //int tileHeight = 128; int x0 = 144 + tileWidth/2; int y0 = 2; int i = (int)Math.floor( (y - y0)/(double)tileHeight - (x - x0)/(double)tileWidth ); int j = (int)Math.floor( (y - y0)/(double)tileHeight + (x - x0)/(double)tileWidth ); return new Vector2f(i, j); } protected static Vector2f _pixelToIsoColor(Vector2f pixel, int camX, int camY){ int tileWidth = Tile.TILE_ISO_WIDTH; //180 int tileHeight = Tile.TILE_ISO_HEIGHT; //90 Vector2f cam = cameraCalc(camX, camY); //int playerTileX = -((camX - (Display.getWidth() / 2 - 64)) / 128); //int playerTileY = -((camY - (Display.getHeight() / 2 - 64)) / 128); int nx = (int) (pixel.x + cam.x) - 450; int ny = (int) (pixel.y + cam.y) - 450; int maskX = nx / tileWidth; int maskY = (ny / tileHeight) * 2; int mouseMapX = nx % tileWidth; int mouseMapY = ny % tileHeight; try{ Color color = new Color(TextureManager.tileMap.getRGB(mouseMapX, mouseMapY)); if(color.equals(new Color(255, 0, 0))) return new Vector2f(maskX - 1, maskY); if(color.equals(new Color(255, 255, 0))) return new Vector2f(maskX, maskY - 1); if(color.equals(new Color(0, 255, 0))) return new Vector2f(maskX, maskY + 1); if(color.equals(new Color(0, 0, 255)))return new Vector2f(maskX - 1, maskY); } catch(Exception e){} return new Vector2f(maskX, maskY); } public static Vector2f cameraCalc(int camX, int camY){ int playerTileX = -((camX - (Display.getWidth() / 2 - 64)) / 128); int playerTileY = -((camY - (Display.getHeight() / 2 - 64)) / 128); int heightPlus = 0; int widthPlus = 0; heightPlus += playerTileX * 45; widthPlus -= playerTileX * 90; heightPlus += playerTileY * 90; widthPlus += playerTileY * 90; return new Vector2f(widthPlus, heightPlus); } } [/CODE] Would it be possible to convert the coordinate system in the image to my coordinate system?
2. ## Picking Cells On an Isometric Grid

What type of grid co-ordinates are you using, I'm having trouble as the way I did the isometric view was rotating the tiles. The tiles are 128x128 and about 180x90 in isometric:[img]http://i.imgur.com/emkpZ.png[/img] [CODE] glRotatef(60, 1, 0, 0); glRotatef(45, 0, 0, 1): [/CODE] The Camera co-ords are the coordinates of the current player multiplied by 128.
3. ## Detecting if the Hash (#) key is pressed

I have been writing code to detect text input from the user. One problem I have is that I can't find a way to detect if the hash key is down. I'm using a KeyboardState object to detect key press, so I'm wondering if there is any way to detect if the hash key is down.
• Advertisement