Jump to content

  • Log In with Google      Sign In   
  • Create Account

Mouse click coord in 2D


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
7 replies to this topic

#1 Darkening   Members   -  Reputation: 122

Like
Likes
Like

Posted 05 January 2000 - 10:04 AM

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.

Sponsor:

#2 acw83   Members   -  Reputation: 174

Like
Likes
Like

Posted 05 January 2000 - 10:45 AM

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.

#3 Sieggy   Members   -  Reputation: 122

Like
Likes
Like

Posted 06 January 2000 - 12:48 AM

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.

#4 Darkening   Members   -  Reputation: 122

Like
Likes
Like

Posted 06 January 2000 - 04:46 AM

Does anyone has a tutorial for this or some examples I could look at ?

#5 Sphet   Members   -  Reputation: 631

Like
Likes
Like

Posted 06 January 2000 - 05:51 AM

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.

#6 foofightr   Members   -  Reputation: 130

Like
Likes
Like

Posted 06 January 2000 - 10:25 AM

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)

#7 foofightr   Members   -  Reputation: 130

Like
Likes
Like

Posted 07 January 2000 - 10:03 AM

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)

...

#8 Akura   Members   -  Reputation: 130

Like
Likes
Like

Posted 07 January 2000 - 10:30 AM

I just dont like you !!!

kidding !!

stay well

bruno sousa (akura)




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