美文网首页
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏09

手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏09

作者: __豆约翰__ | 来源:发表于2021-12-30 07:39 被阅读0次

    项目源码

    项目源码

    sprite动画

    上一节,我们可以控制sprite移动了,但sprite的移动就是平移,比较呆板;这一节我们给sprite添加动画效果。

    Animation类继承Transform,这样就具备了平移和缩放的能力。
    主要思想是:
    1.包含一个图片的列表(动画的本质就是多张图片的连续播放)
    2.内部有个定时器,不断更换图片。

    @Override
        public void actionPerformed(ActionEvent e) {
            _currentFrame++;
            if(_currentFrame>_maxFrame){
                _currentFrame = 0;
            }
        }
    

    Animation类完整代码:

    private ArrayList<Image> _images;
    
    package sprite;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    
    
    public class Animation extends Transform implements ActionListener {
    
        private ArrayList<Image> _images;
        private int _frames;
    
        private int _currentFrame = 0;
        private int _maxFrame = 0;
    
        private Timer _tm;
    
        public Animation(ArrayList<Image> images){
            super();
            _images = images;
            _frames = images.size();
            _maxFrame = images.size() - 1;
            _tm = new Timer(50,this);
            _tm.start();
            translate(0, 0);
        }
        
    
        public int getFrameCount(){
            return _frames;
        }
        
    
        public ArrayList<Image> getImages(){
            return _images;
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            _currentFrame++;
            if(_currentFrame>_maxFrame){
                _currentFrame = 0;
            }
        }
    
        public void show(Graphics2D g){
            Image img = _images.get(_currentFrame);
            g.drawImage(img.getImage(),getTransform(),null);
        }
    }
    

    GameApp加载动画

    GameApp.java 的变化
    1.定义一个动画对象

    private Animation hound;
    

    2.构建一个图片列表,并用其初始化动画对象hound

                ArrayList<Image> images = new ArrayList<Image>();
                for(int k = 10; k < 16; k++){
                    Image img = new Image("res/dog/" + k + ".png");
                    images.add(img);
                }
    
                hound = new Animation(images);
    

    3.在每次游戏循环中,调用动画对象的show方法,显示当前动画帧。

    hound.show(g);
    

    相关文章

      网友评论

          本文标题:手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏09

          本文链接:https://www.haomeiwen.com/subject/hcmvqrtx.html