• Advertisement

Archived

This topic is now archived and is closed to further replies.

Mouse click coord in 2D

This topic is 6589 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m starting a new tile engine and I already did the graphic part. Now I need to perfect the user input. I would like to know how I can know on which tile coord the user clicked in an isometric tile engine and in a tile rectangle engine. I would also like to know how I could highlight the border of a tile to give more feedback to the user. I suppose it''s not very difficult after you know how to take the mouse coord to the world coord.

Share this post


Link to post
Share on other sites
Advertisement
Create a bitmap of a diamond with the same shape as your tiles. Give each distinct section it''s own color. Now when you click on a tile, you superimpose that mask bitmap(but don''t display it to the screen) and check to see what color the mouse is in, then you know which cell you are in. That''s the basic principle, sorry that I am not to clear in this description.

Share this post


Link to post
Share on other sites
Its a little too detailed to put in one post so it may not make much sense but another way that I did it is to isolate the click to a rectangular area (the rectangle of the isometric tile, the corners being transparent when blitted) and then compare against the slope of the tile to determine if the click was in that tile or the adjacent one.

Share this post


Link to post
Share on other sites
There is a really good tutorial written by TANSTAFL (or however its spelt) in the Isometric game programming section here on GameDev. It talks about Mouse Maps. I''ve just used it to implement in my engine and it works very well. Just remember that there''s no real need to store the mouse map as an RGB bitmap -- a gray scale is good enough.

Share this post


Link to post
Share on other sites
For rectangular tile engines, here''s how you find out which tile the user clicked on. You need to know this information to start with:

- map position of top-left cell [mappos]
- screen position of top-left map cell (usually 0,0) [topleft_screen]
- tile width [tile_w]
- tile height [tile_h]

Here''s how.


typedef struct {
int x;
int y;
} vec_2d;

// converts screen coordinates to map coordinates
vec_2d WhereMap (int screen_x, int screen_y)
{
vec_2d pos;

pos.x = mappos.x + (screen_x - topleft_screen.x) / tile_w;
pos.y = mappos.y + (screen_y - topleft_screen.y) / tile_h;

return (pos);
}

I dunno about isometric calculations, better listen to other people on that one

For highlighting a tile, you just need to modify the above function to something like this:

// snaps coordinates to upper left of current tile
vec_2d WhereHighlight (int screen_x, int screen_y)
{
vec_2d pos;

pos.x = topleft_screen.x + ((screen_x - topleft_screen.x) / tile_w) * tile_w;
pos.y = topleft_screen.y + ((screen_y - topleft_screen.y) / tile_h) * tile_h;

return (pos);
}

This gives you the upper left screen coordinate. To get the lower right coordinate, you add (tile_w - 1) and (tile_h - 1) to the X and Y coordinates, respectively. Use these 4 coordinates to draw a rectangle.

(note that the rectangle is drawn INSIDE the borders of the tile. To avoid this is pretty simple, just add/subtract 1 from the coords)

Share this post


Link to post
Share on other sites
heh, why is it that when I answer a question in depth, all discussion immediately STOPS on the topic? my answer too good or something, nobody can find a flaw?? (or nobody cares, heh)

...

Share this post


Link to post
Share on other sites
I just dont like you !!!

kidding !!

stay well

bruno sousa (akura)

Share this post


Link to post
Share on other sites

  • Advertisement