4 Replies - 943 Views - Last Post: 18 December 2012 - 09:58 PM Rate Topic: -----

#1 Xyled777  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • 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  Icon User is offline

  • D.I.C Lover

Reputation: 0
  • View blog
  • 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?
Was This Post Helpful? 0
  • +
  • -

#3 Xyled777  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • 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!
Was This Post Helpful? 0
  • +
  • -

#4 anonymous26  Icon User is offline

  • D.I.C Lover

Reputation: 0
  • View blog
  • 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?
Was This Post Helpful? 0
  • +
  • -

#5 Xyled777  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • 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;
    }

Was This Post Helpful? 0
  • +
  • -

Page 1 of 1