鼠标单击坐标始终为0 [英] Mouse click coordinates are always 0

查看:206
本文介绍了鼠标单击坐标始终为0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如您所看到的,我在游戏中添加了一个鼠标监听器。

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

这是我的鼠标适配器类,基本上我只想要是鼠标按下的x,y坐标

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

当我尝试获取X和Y坐标时它们总是0而不是鼠标实际点击的位置。我不知道为什么。

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.

推荐答案

public int x, y;

int变量总是初始化为0.

int variables are always initialized to 0.

public void MousePressed(MouseEvent e)

方法名称是区分大小写。

Method names are case sensitive.

您的代码永远不会被执行,因为要覆盖的方法应该是 mousePressed(...)。修复代码中的拼写错误。

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

始终使用以下代码:

@Override
public void mousePressed(MouseEvent e)

然后如果你打错字了编译器会告诉你。

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


当我试图得到X和Y坐标时,它们总是为0

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.

这篇关于鼠标单击坐标始终为0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆