Animated Sprites with Java Swing

前端 未结 2 942
离开以前
离开以前 2020-12-04 01:37

Can someone tell me how can I slowdown the sprites appearance to create a more smooth animation? When I run the code it appears the last (27th) sprite in the JPanel. The ani

2条回答
  •  被撕碎了的回忆
    2020-12-04 01:52

    I have changed some sprite sheet coords because I could find a similar image, but it should give you the idea:

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class Sprites extends JFrame {
    
        public static void main(String[] args) {
            JFrame frm1 = new JFrame();
            frm1.setSize(400,400);
            frm1.setLocationRelativeTo(null);
            frm1.setResizable(false);
            frm1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Painel1 pn1 = new Painel1();
            frm1.getContentPane().add(pn1);
            frm1.setVisible(true);
        }
    
    }
    
    class Painel1 extends JPanel {
    
        BufferedImage img;
        Timer timer;
        int i;
        Image subSprite;
        int[][] spriteSheetCoords = { { 8, 10, 119, 129 }, { 138, 10, 118, 130 }, { 267, 10, 118, 132 },
                { 402, 11, 113, 132 }, { 538, 12, 106, 134 }, { 671, 13, 103, 133 }, { 671, 12, 102, 132 },
                { 23, 161, 100, 134 }, { 157, 162, 96, 134 }, { 287, 159, 95, 135 }, { 418, 158, 95, 133 },
                { 545, 159, 99, 133 }, { 673, 159, 102, 134 }, { 550, 158, 108, 130 }, { 9, 309, 116, 126 },
                { 137, 309, 118, 127 }, { 274, 310, 110, 128 }, { 412, 311, 102, 129 }, { 541, 312, 103, 130 },
                { 671, 312, 104, 131 }, { 600, 312, 98, 132 }, { 29, 463, 94, 135 }, { 155, 462, 98, 135 },
                { 279, 461, 104, 135 }, { 409, 461, 106, 135 }, { 536, 461, 109, 135 }, { 662, 461, 112, 133 } };
    
        public Painel1() {
            setBackground(Color.yellow);
            try
            {
                img = ImageIO.read(new File("images/ffffd.png"));
                timer = new Timer();
                timer.scheduleAtFixedRate(new TimerTask() {
                    @Override
                    public void run() {
                        subSprite = img.getSubimage(spriteSheetCoords[i][0], spriteSheetCoords[i][1], spriteSheetCoords[i][2],
                                spriteSheetCoords[i][3]);
                        i++;
                        repaint();
                        revalidate();
                    }
                }, 500, 500);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(subSprite, 140, 120, null);
        }
    }
    

提交回复
热议问题