• Create Account

I'm desperate. Isometric Mouse Coordinates

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

5 replies to this topic

#1EFileTahi-A  Members   -  Reputation: 130

Like
0Likes
Like

Posted 06 May 2013 - 07:08 AM

After browsing the web and reading dozens of examples and tutorials I still can't figure out how to translate mouse X;Y screen position in pixels to X;Y isometric tile index. All the examples I tried returned strange values.

The attached picture shows exactly the tiles' redering order. The Zig-Zag  rendering mode was so simple to implement with the help of a colored coded tile. But this diamond shapped design is really giving me a hard time.

I guess the formula involves the following variables:

- MousePos.X

- MousePos.Y

- TileWidth

- TileHeight

- ScreenWidth

- ScreenHeight

Now I just need to know how to put the pieaces the together as I really can't see any logic behind it.

Thank you very much for any possible help.

Attached Thumbnails

"Sometimes you may think you're alone but that's not true, where ever you go, Death is always near and always watching you." By me January 2007

#2pizzafan  Members   -  Reputation: 647

Like
0Likes
Like

Posted 06 May 2013 - 09:20 AM

hi, i suggest you look there : http://archive.gamedev.net/archive/reference/programming/features/mm4ihm/index.html, as you mentioned the use of the "colored coded tile" trick.

(or you can try the mathematical way : http://en.wikipedia.org/wiki/Transformation_matrix)

pizzafan.

#3EFileTahi-A  Members   -  Reputation: 130

Like
0Likes
Like

Posted 06 May 2013 - 10:18 AM

I already knew those links. The first one doesn't explain how having the mouse at the middle-top of the screen translates itself to 0,0 isometric coordinates. wtihout knowing this the colored tile is useless. As for the second link, I'm affraid that math is too advanced o me...

"Sometimes you may think you're alone but that's not true, where ever you go, Death is always near and always watching you." By me January 2007

#4Jutaris  Members   -  Reputation: 474

Like
2Likes
Like

Posted 06 May 2013 - 01:32 PM

I battled this a LONG LONG time ago back in '08 (took some searching, but here's the thread)

The resolution is below, quoted for proper credit .

its simple really, I'll start from tile--> screen and then see how it goes from screen to tile. Of course you should replace the numbers 64 and 32 by constants for easy change.

tile --> screen
for every tile you go in the X direction you go 64 pixels right and 32 pixels down,
for every tile you go in the Y direction you go 64 pixels left and 32 pixels down,

on screen right=positive x, left=negative x, up=negative y, down = positive y

so we get:
pixel_x = X_LOCATION_OF_TOP_MIDDLE_TILE + 64*tile_x - 64*tile_y
pixel_y = Y_LOCATION_OF_TOP_MIDDLE_TILE + 32*tile_x + 32*tile_y

now to do the screen --> tile
for ease of writing, pixel_x = px, tile_x = tx, X_LOCA... = X0

equation1: px = X0 + 64*(tx-ty)
equation2: py = Y0 + 32*(tx+ty)
we want to find equations for tx and ty when given px and py, so we do some algebra:

eq1+2*eq2 = px+2py = X0+2Y0 + 128*tx
---> tx = (px+2*py -X0-2Y0)/128

eq1-2eq2 = px-2py = X0-2*Y0 -128ty
---> ty = (px-2py - X0+2*Y0) /(-128)

I hope that was clear, and maybe you learned some math from it

the matrices are just compressed way to do the algebra.

[Edited by - Iftah on December 5, 2008 6:08:28 AM]

In order to get it to work, I had to change the 128's to 64's. It's been forever so I don't remember much of that code, but it should be pretty straight forward.

Hope it helps.

Basic Flying Rules:Try to stay in the middle of the air. Do not go near the edges of it. The edges of the air can be recognized by the appearance of ground, buildings, sea, trees and interstellar space. It is much more difficult to fly there.

Come join us for some friendly game dev discussions over in XNA Chat!

#5pizzafan  Members   -  Reputation: 647

Like
1Likes
Like

Posted 06 May 2013 - 01:53 PM

well, i also found another link explaining it (http://gamedev.stackexchange.com/questions/34787/how-to-convert-mouse-coordinates-to-isometric-indexes), but as far as i can remember, i used a formula looking like this :

tiles(i,j) -> screen(X,Y)

X = i * (w/2) - j * (w/2) + center

Y = i * (h/2) + j * (h/2)

screen(X,Y) -> tiles(i,j)

i = (X * (h/2) + Y * (w/2) - (center + w/2) * (h/2)) / (w*h/2)

j = (-X * (h/2) + Y * (w/2) + (center + w/2) * (h/2)) / (w*h/2)

where center is the offset along the X axis (typically screen width divided by 2, minus half the tile's width).

(edit : i just basically tested it, and it works )

Edited by pizzafan, 06 May 2013 - 02:40 PM.

pizzafan.

#6EFileTahi-A  Members   -  Reputation: 130

Like
0Likes
Like

Posted 07 May 2013 - 10:21 AM

Thank you guys for the precious info!

"Sometimes you may think you're alone but that's not true, where ever you go, Death is always near and always watching you." By me January 2007

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

PARTNERS