如何在另一种方法中使用 MouseMotion 整数
How to use MouseMotion ints in another method
所以基本上我在玩图形和一堆有趣的东西,我想在制作游戏之前知道这些我想知道如何使用不同的循环来做一些有趣的事情的不同方式,但我无法弄清楚我如何使用我在 mouseMoved 方法中创建的 INT,然后在图形方法中使用它。该代码可能会更好地说明我要解释的内容。
package com.martin;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.*;
public class Grids extends JFrame implements MouseMotionListener {
JPanel p = new JPanel();
public int width = 1200;
public int height = 800;
public Grids() {
addMouseMotionListener(this);
windowLoader();
}
public static void main(String[] args){
new Grids();
}
public void windowLoader() {
setPreferredSize(new Dimension(width, height));
setMaximumSize(new Dimension(width, height));
setMinimumSize(new Dimension(width, height));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
// setBackground(Color.BLACK);
p.setSize(width, height);
p.setOpaque(false);
// p.setBackground(Color.BLACK);
add(p);
pack();
setVisible(true);
}
public void mouseMoved(MouseEvent e) {
double mouseX = e.getX();
double mouseY = e.getY();
}
public void mouseDragged(MouseEvent e) {
}
public void paint(Graphics g) {
Random rand = new Random();
int cols, rows;
int size = 8;
Color color;
for (rows = 0; rows < width; rows++) {
for (cols = 0; cols < height; cols++) {
color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
// g.setColor(color);
// g.fillRect(rows * size, cols * size, size, size);
// g.drawRect(rows * size, cols * size, size, size);
// g.drawLine(rows * size, cols * size, size, size);
// g.drawRoundRect(rows * size, cols * size, size, size, 10, 10);
// g.fillRoundRect(rows * size, cols * size, size, size, 10, 10);
}
}
// int x = 0;
// int y = 0;
// int spacing = rand.nextInt(20) + 1;
//
// while (spacing > -1) {
// spacing = spacing + rand.nextInt(20);
// }
//
// while (x < width) {
// g.drawLine(x, 0, x, height);
// x = x + spacing;
// }
// while (y < height) {
// g.drawLine(0, y, width, y);
// y = y + spacing;
// }
// Point mouseL = MouseInfo.getPointerInfo().getLocation();
// double mouseX = mouseL.getX();
// double mouseY = mouseL.getY();
int x = 0, y = 0;
//Can't access the int from the mouseMoved I get red underline for error (variable cannot be found)
while (x < width) {
if (mouseX < 1) {
x = x + 10;
} else {
x = x + (int)mouseX;
}
while (y < height) {
if (mouseY < 1) {
y = y + 10;
} else {
y = y + (int)mouseY;
}
g.fillRoundRect(x, y, 10, 10, 10, 10);
}
}
repaint();
}
}
这是完整的代码,我尝试使用 MouseInfo 获取指针位置,但它获取的是 JFrame 组件的位置,我想获取 JFrame 本身上的鼠标位置,而不是组件外的鼠标位置。
我相信以下 mre 演示了您想要的功能。
使用 drawTrail
打开或关闭轨迹绘制:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Grids extends JPanel implements MouseMotionListener {
public final static int WIDTH = 1200, HEIGHT = 800, POINT_SIZE = 10;
private double mouseX, mouseY;
private List<Point> points ; //stores all trail points
private boolean drawTrail = true; //change to false to draw only one point at the mouse location
public Grids() {
addMouseMotionListener(this);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setBackground(Color.WHITE);
if(drawTrail) {
points = new ArrayList<>(); //add mouse point to collection
}
}
@Override
public void mouseMoved(MouseEvent e) {
//set a min distance between points
if( Math.abs(mouseX - e.getX()) >= POINT_SIZE || Math.abs(mouseY - e.getY()) >= POINT_SIZE ) {
if(drawTrail) {
points.add(new Point(e.getX(),e.getY()));
}
mouseX = e.getX();
mouseY = e.getY();
repaint();
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Random rand = new Random();
if(drawTrail){
//draw all collected points
for (Point p : points){
Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(color);
g.fillOval(p.x, p.y, POINT_SIZE, POINT_SIZE);
}
}else{
//if you only want the point at the
Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(color);
g.fillOval((int)mouseX, (int)mouseY, POINT_SIZE, POINT_SIZE);
}
}
@Override
public void mouseDragged(MouseEvent e) {/*todo*/}
public static void main(String[] args0) {
JFrame frame = new JFrame();
frame.add(new Grids());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationByPlatform(true);
frame.pack();
frame.setVisible(true);
}
}
所以基本上我在玩图形和一堆有趣的东西,我想在制作游戏之前知道这些我想知道如何使用不同的循环来做一些有趣的事情的不同方式,但我无法弄清楚我如何使用我在 mouseMoved 方法中创建的 INT,然后在图形方法中使用它。该代码可能会更好地说明我要解释的内容。
package com.martin;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.*;
public class Grids extends JFrame implements MouseMotionListener {
JPanel p = new JPanel();
public int width = 1200;
public int height = 800;
public Grids() {
addMouseMotionListener(this);
windowLoader();
}
public static void main(String[] args){
new Grids();
}
public void windowLoader() {
setPreferredSize(new Dimension(width, height));
setMaximumSize(new Dimension(width, height));
setMinimumSize(new Dimension(width, height));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
// setBackground(Color.BLACK);
p.setSize(width, height);
p.setOpaque(false);
// p.setBackground(Color.BLACK);
add(p);
pack();
setVisible(true);
}
public void mouseMoved(MouseEvent e) {
double mouseX = e.getX();
double mouseY = e.getY();
}
public void mouseDragged(MouseEvent e) {
}
public void paint(Graphics g) {
Random rand = new Random();
int cols, rows;
int size = 8;
Color color;
for (rows = 0; rows < width; rows++) {
for (cols = 0; cols < height; cols++) {
color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
// g.setColor(color);
// g.fillRect(rows * size, cols * size, size, size);
// g.drawRect(rows * size, cols * size, size, size);
// g.drawLine(rows * size, cols * size, size, size);
// g.drawRoundRect(rows * size, cols * size, size, size, 10, 10);
// g.fillRoundRect(rows * size, cols * size, size, size, 10, 10);
}
}
// int x = 0;
// int y = 0;
// int spacing = rand.nextInt(20) + 1;
//
// while (spacing > -1) {
// spacing = spacing + rand.nextInt(20);
// }
//
// while (x < width) {
// g.drawLine(x, 0, x, height);
// x = x + spacing;
// }
// while (y < height) {
// g.drawLine(0, y, width, y);
// y = y + spacing;
// }
// Point mouseL = MouseInfo.getPointerInfo().getLocation();
// double mouseX = mouseL.getX();
// double mouseY = mouseL.getY();
int x = 0, y = 0;
//Can't access the int from the mouseMoved I get red underline for error (variable cannot be found)
while (x < width) {
if (mouseX < 1) {
x = x + 10;
} else {
x = x + (int)mouseX;
}
while (y < height) {
if (mouseY < 1) {
y = y + 10;
} else {
y = y + (int)mouseY;
}
g.fillRoundRect(x, y, 10, 10, 10, 10);
}
}
repaint();
}
}
这是完整的代码,我尝试使用 MouseInfo 获取指针位置,但它获取的是 JFrame 组件的位置,我想获取 JFrame 本身上的鼠标位置,而不是组件外的鼠标位置。
我相信以下 mre 演示了您想要的功能。
使用 drawTrail
打开或关闭轨迹绘制:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Grids extends JPanel implements MouseMotionListener {
public final static int WIDTH = 1200, HEIGHT = 800, POINT_SIZE = 10;
private double mouseX, mouseY;
private List<Point> points ; //stores all trail points
private boolean drawTrail = true; //change to false to draw only one point at the mouse location
public Grids() {
addMouseMotionListener(this);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setBackground(Color.WHITE);
if(drawTrail) {
points = new ArrayList<>(); //add mouse point to collection
}
}
@Override
public void mouseMoved(MouseEvent e) {
//set a min distance between points
if( Math.abs(mouseX - e.getX()) >= POINT_SIZE || Math.abs(mouseY - e.getY()) >= POINT_SIZE ) {
if(drawTrail) {
points.add(new Point(e.getX(),e.getY()));
}
mouseX = e.getX();
mouseY = e.getY();
repaint();
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Random rand = new Random();
if(drawTrail){
//draw all collected points
for (Point p : points){
Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(color);
g.fillOval(p.x, p.y, POINT_SIZE, POINT_SIZE);
}
}else{
//if you only want the point at the
Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(color);
g.fillOval((int)mouseX, (int)mouseY, POINT_SIZE, POINT_SIZE);
}
}
@Override
public void mouseDragged(MouseEvent e) {/*todo*/}
public static void main(String[] args0) {
JFrame frame = new JFrame();
frame.add(new Grids());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationByPlatform(true);
frame.pack();
frame.setVisible(true);
}
}