0
\$\begingroup\$

I have a 2D world background made up of a Grid of graphics, which I display on screen with a viewport (800x600) and it all works.

My question is I have the following code to

convert the mouse co-ordinates to world co-ordinates

then

World co-ordinates to grid co-ordinates

then

grid co-ordinates to screen co-ordinates.

//Add camerax to mouse screen co-ords to convert to world co-ords.    
int cursorx_world=(int)camerax+(int)GameInput.mousex;
int cursorx_grid=(int)cursorx_world/blocksize;  // World Co-ords / gridsize give grid co-ords
int cursorx_screen=-(int)camerax+(cursorx_grid*blocksize);

So is there anyway I can convert straight from mouse screen co-ords to screen co-ordinates?

\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

Something I use fairly often is a viewbounds variable, which is a list of three game coordinates. The first is the upper-left corner of the screen, the second is the center, and the third is the bottom right. I also use zoom (which looks like your blocksize).

When you register a mouse event, you can find its game coordinate by offsetting from the first viewbound by the coordinates of the mouse multiplied** by the zoom level.

// Create a new Coordinate using a copy constructor
game_coor = new Coordinate(viewbounds[0]).add(mouse_coor.multiply(zoom));

** Depending on your implementation zoom could be px/unit or unit/px, multiply or divide accordingly.

\$\endgroup\$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.