【问题标题】:Animating Tiles In My Game在我的游戏中动画瓷砖
【发布时间】:2013-07-27 11:43:21
【问题描述】:

我正在制作一个 Pokemon Style 2D java 游戏,不使用任何库,只使用纯 java,我正在努力让水砖动画化。我希望磁贴每半秒左右更新一次。我将发布我的主类、抽象图块类、水类和屏幕类,以便您想办法让我知道如何在我的游戏中为图块设置动画。

P.S:现在我正在尝试为水砖制作动画。所有的精灵都是为了测试,稍后会改变。

DropBox 上的代码:AnimatedTileMainScreenTile

【问题讨论】:

  • 您使用的是 GLUT 还是 equvilant?
  • 你可以使用 gif 图片
  • 是的,但我想通过代码学习如何做到这一点。
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • “谢谢,Hunter。” 不要包含信号。在问题中,它们是噪音。

标签: java image animation tiles 2d-games


【解决方案1】:

我在其他动画问题中发布了我的动画教程,尽管其他人似乎不太喜欢它。也许你会发现它更有用,我只使用了 java.awt。有一个关于如何为图像设置动画的工作示例。在我的方法中 - 要动画的图像的所有图块都包含在一个长图像中,并且通过更新要加载的缓冲区部分的 X 坐标,可以滚动帧并以这种方式实现动画。

享受: https://sites.google.com/site/javagamescorner/home/animated-sprites

【讨论】:

    【解决方案2】:

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import javax.swing.*;
    
    class AnimatedWater {
    
        public static void main(String[] args) {
            Runnable r = new Runnable() {
    
                @Override
                public void run() {
                    final JPanel gui = new JPanel(new GridLayout(2,0,0,0));
    
                    final AnimatedTile[] tiles = new AnimatedTile[8];
                    for (int ii=0; ii<tiles.length; ii++) {
                        tiles[ii] = new AnimatedTile();
                        gui.add(new JLabel(new ImageIcon(tiles[ii])));
                    }
                    ActionListener listener = new ActionListener() {
    
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            for (int ii=0; ii<tiles.length; ii++) {
                                tiles[ii].paintImage();
                                gui.repaint();
                            }
                        }
                    };
                    Timer timer = new Timer(50, listener);
                    timer.start();
    
                    JOptionPane.showMessageDialog(null, gui);
                    timer.stop();
                }
            };
            // Swing GUIs should be created and updated on the EDT
            // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
            SwingUtilities.invokeLater(r);
        }
    }
    
    class AnimatedTile extends BufferedImage {
    
        GradientPaint[] frameGradient;
        int frame = 0;
    
        AnimatedTile() {
            super(60,60,BufferedImage.TYPE_INT_RGB);
            frameGradient = new GradientPaint[6];
            for (int ii=0; ii<frameGradient.length; ii++) {
                frameGradient[ii] = new GradientPaint(
                        0f,(float)ii,Color.BLUE, 
                        0f,(float)ii+3,Color.CYAN,true);
            }
        }
    
        public void paintImage() {
            Graphics2D g = createGraphics();
            if (frame==frameGradient.length-1) frame = 0;
            else frame++;
            g.setPaint(frameGradient[frame]);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.dispose();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多