# Picking a tile on a STAGGERED isometric map

Page 1 of 1

## 4 Replies - 1614 Views - Last Post: 18 December 2012 - 09:58 PMRate Topic: //<![CDATA[ rating = new ipb.rating( 'topic_rate_', { url: 'http://www.dreamincode.net/forums/index.php?app=forums&module=ajax&section=topics&do=rateTopic&t=304161&amp;s=1ce9f11b497600df49594405bd646602&md5check=' + ipb.vars['secure_hash'], cur_rating: 0, rated: 0, allow_rate: 0, multi_rate: 1, show_rate_text: true } ); //]]>

### #1 Xyled777

Reputation: 0
• Posts: 11
• Joined: 26-December 09

# Picking a tile on a STAGGERED isometric map

Posted 16 December 2012 - 08:31 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...
http://i195.photobuc...taggeredMap.png

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. Smiley

Is This A Good Question/Topic? 0

## Replies To: Picking a tile on a STAGGERED isometric map

### #2 anonymous26

• D.I.C Lover

Reputation: 1
• Posts: 3,638
• Joined: 26-November 10

## Re: Picking a tile on a STAGGERED isometric map

Posted 16 December 2012 - 09:19 PM

What platform are you running this on?

### #3 Xyled777

Reputation: 0
• Posts: 11
• Joined: 26-December 09

## Re: Picking a tile on a STAGGERED isometric map

Posted 16 December 2012 - 09:37 PM

I'm using flash for an isometric game, but the algorithm can be pretty generic and applied in any language.

I had some formulas donated by a contributor for a standard diamond shaped isometric map that works great, but since I changed the map style to a staggered isometric map, chopping those formulas up to work is making my receding hair line, recede completely! Hehehehe.

Thanks!

### #4 anonymous26

• D.I.C Lover

Reputation: 1
• Posts: 3,638
• Joined: 26-November 10

## Re: Picking a tile on a STAGGERED isometric map

Posted 16 December 2012 - 10:49 PM

Did you understand the initial 'algorithm'? Do you have any ideas at all how to approach it?

### #5 Xyled777

Reputation: 0
• Posts: 11
• Joined: 26-December 09

## Re: Picking a tile on a STAGGERED isometric map

Posted 18 December 2012 - 09: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.co...d-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;
}
```