MouseListener "наполовину работает" в моем апплете
Поэтому я исследовал Applets и использовал Canvas и BufferStrategy в апплете. Я получил его в буфер и показать правильно, но я думаю, что это как-то мешает MouseListener. Когда я запускаю апплет и изменяю размер экрана, MouseListener работает вне моего указанного холста. Поэтому, когда я перемещаю мышь над тем местом, где она рисует, координаты мыши замирают. Затем, когда я убираю мышь с холста, это работает. Так что с MouseListener все в порядке. Я все равно включу это.
Класс MouseMotion:
public class MouseMotion implements MouseMotionListener{
private int x;
private int y;
public MouseMotion()
{
x = 0;
y = 0;
System.out.println("MouseMotion initialized");
}
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e)
{
x = e.getX();
y = e.getY();
}
//Return methods...
}
Мышь класс:
public class Mouse implements MouseListener{
private int clickedX;
private int clickedY;
private int clickedButton;
private boolean pressed;
private int pressedX;
private int pressedY;
private int pressedButton;
public Mouse()
{
//Instantiates all the variables
System.out.println("Mouse initialized");
}
public void mouseClicked(MouseEvent e) {
clickedX = e.getX();
clickedY = e.getY();
clickedButton = e.getButton();
}
public void mousePressed(MouseEvent e) {
pressed = true;
pressedX = e.getX();
pressedY = e.getY();
pressedButton = e.getButton();
}
public void mouseReleased(MouseEvent e) {
pressed = false;
pressedX = 0;
pressedY = 0;
pressedButton = 0;
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
//Methods that return each variable...
}
Класс AppletMain:
public class AppletMain extends Applet implements Runnable{
//Constants
private final int WIDTH = 720;
private final int HEIGHT = WIDTH / 16 * 9;
//Applet objects
private BufferStrategy bs;
private Canvas canvas;
//Game loop variables
...
//Engine objects
private Mouse mouse;
private MouseMotion mouseMotion;
public void init()
{
canvas = new Canvas();
mouse = new Mouse();
mouseMotion = new MouseMotion();
addMouseListener(mouse);
addMouseMotionListener(mouseMotion);
}
public void render()
{
//Setup graphics
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
g.clearRect(0,0,WIDTH,HEIGHT);
//Just prints out the debugging stuff
g.setColor(Color.BLACK);
g.drawRect(0,0,WIDTH-1,HEIGHT-1);
g.drawString("TPS: " + Integer.toString(tps) + " FPS: " + Integer.toString(fps), 2,20);
g.drawString("MouseMotion: X - " + Integer.toString(mouseMotion.getX()) + " Y - " + Integer.toString(mouseMotion.getY()), 2,40);
g.drawString("Mouse(PRESSED): X - " + Integer.toString(mouse.getPressedX()) + " Y - " + Integer.toString(mouse.getPressedY()) + " button - " + Integer.toString(mouse.getPressedButton()), 2,60);
g.drawString("Mouse(CLICKED): X - " + Integer.toString(mouse.getClickedX()) + " Y - " + Integer.toString(mouse.getClickedY()) + " button - " + Integer.toString(mouse.getClickedButton()), 2,80);
//Cleanup graphics
g.dispose();
bs.show();
}
public void tick()
{
//Ticks the game
}
public void start()
{
if(bs == null)
{
setIgnoreRepaint(true);
canvas.setIgnoreRepaint(true);
canvas.setSize(WIDTH,HEIGHT);
setLayout(null);
add(canvas);
canvas.setLocation(0,0);
canvas.createBufferStrategy(3);
bs = canvas.getBufferStrategy();
}
new Thread(this).start();
canvas.requestFocus();
}
public void stop()
{
running = false;
}
public void destroy()
{
if(running)
running = false;
}
public void run()
{
init();
//Game loop that calls tick() and render() 60 times per second
}
}
В своем коде я нарисовал черный прямоугольник вокруг холста, и, как я уже говорил, когда моя мышь входит в черный ящик, координаты перестают изменяться. "Fps" и "tps" продолжают работать, которые увеличиваются игровым циклом, так что я знаю, что он все еще работает. Когда мышь выходит из поля, координаты снова начинают меняться, когда я перемещаю ее по окну.
Я пытался следовать примеру других людей, и я верю, что у меня есть. Может быть, мой подход к этому совершенно неправильный, я не знаю, но любая помощь, ответы, комментарии, советы, что-либо очень ценится.