【问题标题】:Making Graphics.drawLine follow mouse without extending使 Graphics.drawLine 跟随鼠标而不扩展
【发布时间】:2019-04-10 13:17:59
【问题描述】:

我正在制作一个基本的泡泡射击游戏来练习我的编码,我正在尝试制作指针,以便它可以瞄准我想要它射击的地方,我有线条移动跟随我的鼠标,但它会延伸它离中心越来越远。我想像有一个支点一样转动。

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 坐标,而是延伸到跟随鼠标。

【问题讨论】:

    标签: java graphics game-physics


    【解决方案1】:

    您的代码中有一些错误:

    • 您需要将面板添加到框架中。
    • 你需要调用你的绘图方法。
    • 绘图时需要设置颜色。
    • 您应该根据面板的当前大小而不是常数点来计算第一个点。

    这是一个工作代码:

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

    【讨论】:

    • 谢谢,但我已经拥有了所有这些。因为不想发布整个程序,所以我遗漏了很多代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多