項(xiàng)目源碼
sprite動畫
上一節(jié)卷要,我們可以控制sprite移動了瘪校,但sprite的移動就是平移,比較呆板;這一節(jié)我們給sprite添加動畫效果糊啡。
Animation類繼承Transform,這樣就具備了平移和縮放的能力吁津。
主要思想是:
1.包含一個圖片的列表(動畫的本質(zhì)就是多張圖片的連續(xù)播放)
2.內(nèi)部有個定時器棚蓄,不斷更換圖片。
@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.構(gòu)建一個圖片列表碍脏,并用其初始化動畫對象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.在每次游戲循環(huán)中梭依,調(diào)用動畫對象的show方法,顯示當(dāng)前動畫幀典尾。
hound.show(g);