就是准备四张行走的图片,然后切换
面板代码
package jj;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class spipanel extends JPanel implements Runnable {
//绘制线程类
private Sprite player;
public spipanel() {
// TODO Auto-generated constructor stub
player=new Sprite();
player.init(500, 250);
Thread t=new Thread(this);
t.start();
}
//重载run方法
@Override
public void run() {
// TODO Auto-generated method stub
//线程无线循环
while (true) {
player.UpdateSprite();//更新
try {
Thread.sleep(500);//线程休
} catch (Exception e) {
// TODO: handle exception
}
repaint();//窗口重绘
}
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
//屏幕清空
g.clearRect(0,0,this.getWidth(), this.getHeight());
player.DrawSprite(g, this);
}
public static void main(String[] args) {
JFrame frame = new JFrame("显示图像");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,800);
frame.getContentPane().add(new spipanel());
// frame.pack();
frame.setVisible(true);
}
}
精灵代码
package jj;
//Sprite类
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import javax.swing.JPanel;
public class Sprite {
/** Sprite的X,Y坐标**/
public int m_posX = 0,m_posY = 0;
private Image pic[] = null; // Sprite图片数组
/** 当前帧的ID **/
private int mPlayID = 0;
/**是否更新绘制Sprite**/
boolean mFacus = true;
public Sprite () {
pic = new Image[4];
for (int i = 0; i < 4; ++i) {
pic[i] = Toolkit.getDefaultToolkit().getImage(
"D:\\programing\\jj\\src\\imager_stu\\a"+ (i+1) + ".png");
System.out.println("D:\\programing\\jj\\src\\imager_stu\\a"+ (i+1) + ".png");}
}
/**初始化坐标**/
public void init(int x, int y) {
m_posX = x;
m_posY = y;
}
/**设置坐标**/
public void set(int x, int y) {
m_posX = x;
m_posY = y;
}
/**绘制精灵**/
public void DrawSprite (Graphics g,JPanel i)
{
g.drawImage(pic[mPlayID],m_posX,m_posY,(ImageObserver)i);
mPlayID++; //下一帧图像
if(mPlayID==4) mPlayID=0;
}
//Sprite坐标更新主要修改x坐标(水平方向)值,每次15个像素。当然也可以修改Y坐标(垂直方向)值,这里为了简单化没修改Y坐标值(垂直方向)。
/**更新精灵的坐标点**/
public void UpdateSprite () {
if (mFacus==true)
m_posX -= 5;
}
}