When I move it it obviously changes the viewport so my mouse picking is off.

My camera is just a float x and y and I use g.translate(-cam.cameraX+400, -cam.cameraY+300); to translate the graphics. I have the numbers hard coded just for testing purposes.

How would I take into account the camera so my mouse picking works correctly.

double mousetileX = Math.floor((double)mouseX/tiles.tileWidth);
    double mousetileY = Math.floor((double)mouseY/tiles.tileHeight);

    double playertileX = Math.floor(playerX/tiles.tileWidth);
    double playertileY = Math.floor(playerY/tiles.tileHeight);

    double lengthX = Math.abs((float)playertileX - mousetileX); 
    double lengthY = Math.abs((float)playertileY - mousetileY);
    double distance = Math.sqrt((lengthX*lengthX)+(lengthY*lengthY)); 

    if(input.isMousePressed(Input.MOUSE_LEFT_BUTTON) && distance < 4) { 
        if(tiles.map[(int)mousetileX][(int)mousetileY] == 1) {
            tiles.map[(int)mousetileX][(int)mousetileY] = 0;

That is my mouse picking code


To get back to world-space, you need to reverse your translation from graphics. Think of graphics-space as U and V instead of X and Y:

u = x + (400 - cameraX); // X coord in graphics space
v = y + (300 - cameraY); // Y coord in graphics space

So to reverse this, rearrange for x and y:

x = u - (400 - cameraX);
y = v - (300 - cameraY);
  • \$\begingroup\$ Where exactly do I use this? And every time I use a variable with coordinates do I have to subtract this from it? Can you give me an example of a variable using this \$\endgroup\$ – Corey Jul 10 '12 at 17:39
  • \$\begingroup\$ You'd need to do this if you were translating screen co-ordinates (i.e, from mouse picking) to world co-ordinates. Because you move the things when going from world to screen, you only need to reverse it when going from screen to world - in other words, when trying to align some point on the user's monitor to some point in the game world. \$\endgroup\$ – Matt Kemp Jul 10 '12 at 20:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.