java - 使 Graphics.drawLine 跟随鼠标而不扩展
问题描述
我正在制作一个基本的泡泡射击游戏来练习我的编码,我正在尝试制作指针,以便它可以瞄准我想要它射击的地方,我有线条移动跟随我的鼠标,但它会延伸一个它变得更远从中心。我想几乎像有一个支点一样转动。
public static void pointer(Graphics g) {
g = panel.getGraphics();
g.drawLine(325, 530, x, 450);
g.fillRect(325, 530, x, 450);
}
public static void UI() {
frame = new JFrame("Bubble shooter");
panel = new JPanel();
panel.setBackground(Color.white);
panel.setLayout(null);
frame.setSize(650,550);
frame.setResizable(false);
frame.setVisible(true);
//frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
mouseMoving = true;
x = e.getX();
System.out.println("X: " + e.getX());
System.out.println("Y: " + e.getY());
}
});
我试图让这条线跟随我的鼠标而不会增长或缩小到一个枢轴点。相反,该线不通过设置的 y 坐标,而是延伸到跟随鼠标。
解决方案
您的代码中有一些错误:
- 您需要将面板添加到框架。
- 你需要调用你的绘图方法。
- 您需要在绘图时设置颜色。
- 您应该通过面板的当前大小而不是恒定点来计算第一个点。
这是一个工作代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MouseTest {
int x = -1;
int y = -1;
public void pointer(Graphics g) {
if (x < 0) {
return;
}
g.setColor(Color.BLUE);
Rectangle bounds = g.getClipBounds();
int startX = (int) (bounds.getWidth() / 2);
int startY = (int) bounds.getHeight();
g.drawLine(startX, startY, x, y);
}
public void UI() {
JFrame frame = new JFrame("Bubble shooter");
JPanel panel = new JPanel() {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
pointer(g);
}
};
panel.setBackground(Color.white);
panel.setLayout(null);
frame.setSize(650,550);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(panel);
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
x = e.getX();
y = e.getY();
panel.repaint();
}
});
}
public static void main(String[] args) {
MouseTest mouseTest = new MouseTest();
mouseTest.UI();
}
}
推荐阅读
- html - HTML 选择提交表单并使用旧标签保留 url
- c# - 如何使用 C# 遍历 DOM 对象?
- json - jq 在管道输出时打印帮助
- excel - Excel 2016 错误?
- angularjs - 验证 ng-repeat 表中的选择选项
- python - 使用保存的 scikit learn 模型查看模型中的类
- angular - 在角度 4 中单击单选按钮时如何禁用文本字段
- javascript - 图像未在 codeigniter 项目的实时服务器中上传,它给出 404 和 500 错误
- cmake - 如何将 cmake 变量设置为目标的 URL
- javascript - 图像重影效果