如何使这个Stickman具有互动性



因此,我需要通过用户输入使Stick-Man可移动。当用户点击零件(头,手,脚和后部)时,他应该移动,不知道该如何处理。如果可能的话,还需要围绕矩形的角色周围有一个局限性,以使每个零件都可以拉出多远。请参阅下面的我的代码;

// Created by Charlie Carr - (28/11/17 - /11/17)
    import java.awt.*;
    import java.applet.Applet;
    import javax.swing.*;
    import java.awt.Graphics;
    import java.awt.geom.*;
    import java.awt.image.BufferedImage;
    //Imports complete
    //Suppress warning about undeclared static final serialVersionUID field in VS Code
    @SuppressWarnings("serial")
    public class Animator extends JPanel {
            public static class AnimatorWindow extends JPanel {
                    public void paint(Graphics page) {
                            setBackground(Color.gray);
                            setForeground(Color.white);
                            super.paintComponent(page);
                            page.drawString("Stickmen Animation Station", 150, 15);
                            //draw the head
                            //x1, y1, x2, y2
                            page.drawOval(90, 60, 20, 20);
                            // draw the body
                            page.drawLine(100, 80, 100, 110);
                            // draw the hands
                            page.drawLine(100, 90, 80, 105);
                            page.drawLine(100, 90, 120, 105);
                            //draw the legs, he hasn't a leg to stand on..
                            page.drawLine(100, 110, 85, 135);
                            page.drawLine(100, 110, 115, 135);
                    }
            }
            public static void main(String[] args) {
                    AnimatorWindow displayPanel = new AnimatorWindow();
                    JPanel content = new JPanel();
                    content.setLayout(new BorderLayout());
                    content.add(displayPanel, BorderLayout.CENTER);
                    //declare window size
                    int x = 480;
                    int y = 240;
                    JFrame window = new JFrame("GUI");
                    window.setContentPane(content);
                    window.setSize(x, y);
                    window.setLocation(101, 101);
                    window.setVisible(true);
            }
    }

使用 MouseListener处理鼠标事件。

另外,您应该覆盖paintComponent()方法而不是paint(),因为paint()还绘制了边框和其他东西。

public static class AnimatorWindow extends JPanel implements MouseListener{
    public AnimatorWindow(){
        setBackground(Color.gray);
        setForeground(Color.white);
        //add the listener
        addMouseListener(this);
    }
    public void paintComponent(Graphics page) {
        super.paintComponent(page);
        //You should not alter the Graphics object passed in
        Graphics2D g = (Graphics2D) page.create();
        //draw your stuff with g
        g.drawString("Stickmen Animation Station", 150, 15);
        .......
        //finish
        g.dispose();
    }

    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mouseClicked(MouseEvent e){
        //implement your clicking here
        //Use e.getX() and e.getY() to get the click position
    }
}

有关摇摆事件的更多信息,请检查此网站

edit :您的问题还包括动画,您可以使用javax.swing.Timer来做到这一点。

相关内容

  • 没有找到相关文章

最新更新