How to make an image move while listening to a keypress in Java.

后端 未结 3 542
一整个雨季
一整个雨季 2020-11-22 09:47

I\'m starting to learn java programming and I think it\'s cool to learn java through game development. I know how to draw image and listen to a keypress then move that image

3条回答
  •  盖世英雄少女心
    2020-11-22 09:57

    But basically I just want to know how to make the image move left to right while the window is listening to a keypress

    You can use a Swing Timer to animate an image:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TimerAnimation extends JLabel implements ActionListener
    {
        int deltaX = 2;
        int deltaY = 3;
        int directionX = 1;
        int directionY = 1;
    
        public TimerAnimation(
            int startX, int startY,
            int deltaX, int deltaY,
            int directionX, int directionY,
            int delay)
        {
            this.deltaX = deltaX;
            this.deltaY = deltaY;
            this.directionX = directionX;
            this.directionY = directionY;
    
            setIcon( new ImageIcon("dukewavered.gif") );
    //      setIcon( new ImageIcon("copy16.gif") );
            setSize( getPreferredSize() );
            setLocation(startX, startY);
            new javax.swing.Timer(delay, this).start();
        }
    
        public void actionPerformed(ActionEvent e)
        {
            Container parent = getParent();
    
            //  Determine next X position
    
            int nextX = getLocation().x + (deltaX * directionX);
    
            if (nextX < 0)
            {
                nextX = 0;
                directionX *= -1;
            }
    
            if ( nextX + getSize().width > parent.getSize().width)
            {
                nextX = parent.getSize().width - getSize().width;
                directionX *= -1;
            }
    
            //  Determine next Y position
    
            int nextY = getLocation().y + (deltaY * directionY);
    
            if (nextY < 0)
            {
                nextY = 0;
                directionY *= -1;
            }
    
            if ( nextY + getSize().height > parent.getSize().height)
            {
                nextY = parent.getSize().height - getSize().height;
                directionY *= -1;
            }
    
            //  Move the label
    
            setLocation(nextX, nextY);
        }
    
        public static void main(String[] args)
        {
            JPanel panel = new JPanel();
            JFrame frame = new JFrame();
    
            frame.setContentPane(panel);
            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            frame.getContentPane().setLayout(null);
    //      frame.getContentPane().add( new TimerAnimation(10, 10, 2, 3, 1, 1, 10) );
            frame.getContentPane().add( new TimerAnimation(300, 100, 3, 2, -1, 1, 20) );
    //      frame.getContentPane().add( new TimerAnimation(0, 000, 5, 0, 1, 1, 20) );
            frame.getContentPane().add( new TimerAnimation(0, 200, 5, 0, 1, 1, 80) );
            frame.setSize(400, 400);
            frame.setLocationRelativeTo( null );
            frame.setVisible(true);
    //      frame.getContentPane().add( new TimerAnimation(10, 10, 2, 3, 1, 1, 10) );
    //      frame.getContentPane().add( new TimerAnimation(10, 10, 3, 0, 1, 1, 10) );
        }
    }
    

    You can add a KeyListener to the panel and it will operate independently of the image animation.

提交回复
热议问题