Mouse click coordinates are always 0

773 views Asked by At

As you can see I added the a mouse listener to the game.

import java.awt.Graphics;
import java.awt.image.BufferStrategy;

public class Game implements Runnable
{
private Display display;
public int width, height;
public String title;

private boolean running = false;
private Thread thread;

private BufferStrategy bs;
private Graphics g;

// States
public static State gameState;

// Input
private InputManager inputManager;
private MouseHandler mouseHandler;

public Game(String title, int width, int height)
{
    this.width = width;
    this.height = height;
    this.title = title;
    inputManager = new InputManager();
    mouseHandler = new MouseHandler();
}

/**
 * Initializes all of the graphics
 */
private void initialize()
{
    display = new Display(title, width, height);
    display.getFrame().addKeyListener(inputManager);
    display.getFrame().addMouseListener(mouseHandler);
    Assets.loadAssets();

    gameState = new GameState(this, 1);
    State.setState(gameState);
}

/**
 * Updates everything in the game loop
 */
private void update()
{
    if (State.getState() != null)
        State.getState().update();
}

private void render()
{
    bs = display.getCanvas().getBufferStrategy();

    // If this is the first time running initialize the buffer strategy
    if (bs == null)
    {
        display.getCanvas().createBufferStrategy(3);
        return;
    }

    g = bs.getDrawGraphics();
    // Clear the screen
    g.clearRect(0, 0, width, height);

    // Drawing
    if (State.getState() != null)
        State.getState().render(g);
    // End drawing
    bs.show();
    g.dispose();
}

public void run()
{

    initialize();

    // Updates the game loop 60 times every 1 second = 1,000,000,000
    // nanoseconds
    int fps = 60;
    double timePerUpdate = 1000000000 / fps;
    double timeElapsed = 0;
    long now;
    // Current time of computer in nanoseconds
    long lastTime = System.nanoTime();

    // Game loop
    while (running)
    {
        now = System.nanoTime();
        timeElapsed += (now - lastTime) / timePerUpdate;
        lastTime = now;

        if (timeElapsed >= 1)
        {
            update();
            render();
            timeElapsed--;
        }
    }

    stop();
}

public synchronized void start()
{
    // Do not make a new thread if it is already running
    if (running)
        return;

    // Starts the game
    running = true;
    thread = new Thread(this); // this = Game class
    thread.start(); // Goes to run
}

public synchronized void stop()
{
    // In case stop gets called and it is already not running
    if (!running)
        return;

    // Stops the game
    running = false;
    try
    {
        thread.join();
    }
    catch (InterruptedException e)
    {
        e.printStackTrace();
    }
}

public InputManager getInputManager()
{
    return inputManager;
}

public MouseHandler getMouseHandler()
{
    return mouseHandler;
}

public static void main(String[] args)
{
    Game game = new Game("Game", 1024, 768);
    game.start();
}
}

This is my mouse adapter class, basically all I want is the x,y coordinates of where the mouse is pressed

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseHandler extends MouseAdapter
{
public int x, y;

public MouseHandler()
{

}

public void MousePressed(MouseEvent e)
{
    x = e.getX();
    y = e.getY();
}
}

When I try to get the X, and Y coordinates they are always 0 instead of where the mouse actually clicked. I have no clue why.

1

There are 1 answers

6
camickr On BEST ANSWER
public int x, y;

int variables are always initialized to 0.

public void MousePressed(MouseEvent e)

Method names are case sensitive.

Your code is never executed since the method to override should be mousePressed(...). Fix the typo in your code.

Always use code like:

@Override
public void mousePressed(MouseEvent e)

Then if you make a typo the compiler will tell you.

When I try to get the X, and Y coordinates they are always 0

Since your code is never executed the default value is returned.