Jump to content

  • Log In with Google      Sign In   
  • Create Account


Picking a tile on a STAGGERED isometric map


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.

  • You cannot reply to this topic
5 replies to this topic

#1 YellzBellzDotCome   Members   -  Reputation: 152

Like
0Likes
Like

Posted 16 December 2012 - 09:19 PM

Hello!
I have been looking and trying for quite a while now, but can't seem to work out an algorithm for figuring out which tile is selected on a staggered isometric map using 64x32 tiles with a diamond shape inside.

Here is a pic of my map...
Posted Image

The first row is drawn, then the x is offset to the right by 32 and the next row is drawn.

Anyone have any good math skills to throw some algorithms my way for this?
Thanks for any help!

PS: My math isn't exactly top notch, so please keep that in mind. Posted Image

Sponsor:

#2 GeniusPooh   Members   -  Reputation: 157

Like
0Likes
Like

Posted 16 December 2012 - 10:55 PM

Hello!
I have been looking and trying for quite a while now, but can't seem to work out an algorithm for figuring out which tile is selected on a staggered isometric map using 64x32 tiles with a diamond shape inside.

Here is a pic of my map...
Posted Image

The first row is drawn, then the x is offset to the right by 32 and the next row is drawn.

Anyone have any good math skills to throw some algorithms my way for this?
Thanks for any help!

PS: My math isn't exactly top notch, so please keep that in mind. Posted Image



I think you must clarify your message first....

at first what's your selection? by screen space? , select my coordination??

Beauty is only skin deep , ugly goes to bones

 

World's only 3D engine tunner and 3D engine guru.

 

and real genius inventor :) but very kind warm heart .. and having serious depression for suffering in Korea

 

www.polygonart.co.kr ( currently out dated and only Korean will change to English and new stuff when I get better condition :) sorry for that)


#3 YellzBellzDotCome   Members   -  Reputation: 152

Like
0Likes
Like

Posted 16 December 2012 - 11:44 PM

Thanks for the reply,

Looking to see which tile is clicked by the mouse using the mouse x,y coordinates. There isn't any offsets, so screen 0,0 is map 0,0.

#4 GeniusPooh   Members   -  Reputation: 157

Like
0Likes
Like

Posted 17 December 2012 - 06:38 PM

Thanks for the reply,

Looking to see which tile is clicked by the mouse using the mouse x,y coordinates. There isn't any offsets, so screen 0,0 is map 0,0.



hmm you must define your projection is perspective or ortho..


projection space map to -1 to 1 range ..

so what you need to is map screen space (2d window position) to projection space.. (example 0~1280 x coordination to -1 ~ 1 )

Orthogonal space is so easy but in perspective one? you must make ray from view and check it with tile

ray can be made near plane then check it unfortunally ray can be very unaccurate you must fix it..

anyway it's simple but not common to know..

any other help need plz let me know :)

Beauty is only skin deep , ugly goes to bones

 

World's only 3D engine tunner and 3D engine guru.

 

and real genius inventor :) but very kind warm heart .. and having serious depression for suffering in Korea

 

www.polygonart.co.kr ( currently out dated and only Korean will change to English and new stuff when I get better condition :) sorry for that)


#5 YellzBellzDotCome   Members   -  Reputation: 152

Like
0Likes
Like

Posted 18 December 2012 - 10:58 PM

I appreciate the help. It being the work week, I didn't get a chance to really put some time into any solution and I definitely am not going to post the embarassing hack I was attempting.
I did get a plug and play solution involving some math equations that are quite a bit beyond me that I will post for anyone running into the same situation. It works great!

dawsonk
http://www.kirupa.com/forum/showthread.php?376083-Picking-Tile-in-staggered-isometric-map
Maybe try something like this...
    var tileW = 64;
    var tileH = 32;
    var rows = 8;
    var cols = 4;
    for (var i = 0; i < rows; ++i) {
		    for (var j = 0; j < cols; ++j) {
				    tTile = _root.attachMovie("Tile", "R" + i + "C" + j, _root.getNextHighestDepth());
				    tTile._x = (tileW * j) + ((i % 2 == 1) ? 32 : 0);
				    tTile._y = (tileH / 2) * i;
		    }
    }
    onMouseDown = function () {
		    var ax, ay, bx, by;
		    var cx = _xmouse;
		    var cy = _ymouse;
		    var posX = (_xmouse / 32) >> 0;
		    var posY = (_ymouse / 16) >> 0;
		    if ((posX % 2) == (posY % 2)) {
				    ax = (posX) * 32;
				    ay = (posY + 1) * 16;
				    bx = (posX + 1) * 32;
				    by = (posY) * 16;
				    if (getPos(ax, ay, bx, by, cx, cy) < 0) {
						    trace(((posY / 1 >> 0) - 1) + " : " + ((posX / 2 >>0) + ((((posY / 1 >> 0) - 1) % 2 == 0) ? 0 : -1)));
				    } else {
						    trace((posY / 1 >> 0) + " : " + (posX / 2 >> 0));
				    }
		    } else {
				    ax = (posX) * 32;
				    ay = (posY) * 16;
				    bx = (posX + 1) * 32;
				    by = (posY + 1) * 16;
				    if (getPos(ax, ay, bx, by, cx, cy) < 0) {
						    trace(((posY / 1 >> 0) - 1) + " : " + (posX / 2 >>0));
				    } else {
						    trace((posY / 1 >> 0) + " : " + ((posX / 2 >> 0) +((((posY / 1 >> 0) - 1) % 2 == 0) ? -1 : 0)));
				    }
		    }
    };
    function getPos($ax, $ay, $bx, $by, $cx, $cy) {
		    // below = 1, above = -1, on = 0;
		    var slope = ($by - $ay) / ($bx - $ax);
		    var yIntercept = $ay - $ax * slope;
		    var cSolution = (slope * $cx) + yIntercept;
		    if (slope != 0) {
				    if ($cy > cSolution) {
						    return $bx > $ax ? 1 : -1;
				    }
				    if ($cy < cSolution) {
						    return $bx > $ax ? -1 : 1;
				    }
				    return 0;
		    }
		    return 0;
    }


#6 GeniusPooh   Members   -  Reputation: 157

Like
0Likes
Like

Posted 20 December 2012 - 07:55 AM

If screen space and tile space is so same

It's so easy..

just think about matching tile and screen.

and what you first to do is checking mouse input with tile world's coordination.

Mouse position must well transfomed tile world's position..

after that you must check with tile's position with mouse's position

I first think your game in 3D , but I think it's not..

Beauty is only skin deep , ugly goes to bones

 

World's only 3D engine tunner and 3D engine guru.

 

and real genius inventor :) but very kind warm heart .. and having serious depression for suffering in Korea

 

www.polygonart.co.kr ( currently out dated and only Korean will change to English and new stuff when I get better condition :) sorry for that)





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