Координаты щелчка мышью всегда 0

Как вы можете видеть, я добавил слушателя мыши в игру.

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();
}
}

Это мой класс адаптера мыши, в основном все, что мне нужно, это координаты x,y, где нажата мышь

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();
}
}

Когда я пытаюсь получить координаты X и Y, они всегда равны 0 вместо того места, где на самом деле щелкала мышь. Понятия не имею почему.

1 ответ

Решение
public int x, y;

Переменные типа int всегда устанавливаются в 0.

public void MousePressed(MouseEvent e)

Имена методов чувствительны к регистру.

Ваш код никогда не выполняется, так как метод для переопределения должен быть mousePressed(...), Исправьте опечатку в вашем коде.

Всегда используйте код как:

@Override
public void mousePressed(MouseEvent e)

Тогда, если вы сделаете опечатку, компилятор скажет вам.

Когда я пытаюсь получить координаты X и Y, они всегда равны 0

Поскольку ваш код никогда не выполняется, возвращается значение по умолчанию.

Другие вопросы по тегам