📄 walker.java
字号:
/**
* Java语言实验参考程序
* Company 北京师范大学计算机系
* @author 孙一林
* @version 1.0
*/
import java.awt.MediaTracker;
import java.awt.Graphics;
import java.awt.Image;
public class Walker extends java.applet.Applet implements Runnable{
Image offScreenImg; // 声明备用屏幕类型
Graphics offScreenG; // 声明备用屏幕绘图类型
MediaTracker tracker; // 声明媒体跟踪器
Image walkerImgs[] = new Image[5]; // 存放动画图像组
Image currentImg; // 当前放映的动画图像
int xpos,ypos = 0; // 动画图像显示的位置
int walk_step = 20; // 动画图像每次移动的距离
int delay = 250; // 每帧时延(毫秒)
Thread runThread;
Image bgImage; // 存放背景图像
int applet_width,applet_height;
int birdImg_width; // 动画图像宽度
public void init() {
tracker = new MediaTracker(this);
for ( int i = 0;i < walkerImgs.length;i++ ){// 获取动画图像组数据
walkerImgs[i] = getImage(this.getCodeBase(),"images/bird"+i+".gif");
tracker.addImage( walkerImgs[i], 0 ); // 列入0组跟踪范围
}
bgImage = getImage(this.getCodeBase(),"images/"+"bg.gif");
// 获取背景图像数据
tracker.addImage( bgImage, 0 ); // 列入0组跟踪范围
applet_width = size().width; // 获取程序显示区宽度
applet_height = size().height; // 获取程序显示区高度
try {
offScreenImg = createImage ( applet_width,applet_height );
// 创建备用屏幕
offScreenG = offScreenImg.getGraphics ();
// 获取备用屏幕的绘图环境
}
catch ( Exception e ) {
offScreenG = null; // 出错设置备用屏幕的绘图环境为null
}
}
public void start () {
if ( runThread == null ) {
runThread=new Thread(this);
runThread.start();
}
}
public void stop() {
if ( runThread != null ) {
runThread.stop();
runThread=null;
}
}
public void run() {
try{
tracker.waitForID(0); // 等待0组中所有图像的到达
}
catch( InterruptedException e ){
return;
}
birdImg_width = walkerImgs[0].getWidth(this);
int i = 0;
while(true) {
for(xpos = -birdImg_width;xpos<=applet_width;xpos+=walk_step) {
// 计算图像显示位置
currentImg = walkerImgs[i];
repaint();
i = (i + 1 ) % walkerImgs.length; // 计算下一帧是哪幅图像
try{ Thread.sleep(delay); }
catch( InterruptedException e ){}
} // end for
} // end while
}
public void paint( Graphics g ) {
g.drawImage( bgImage,0,0,this ); // 显示背景图像
g.drawImage( currentImg,xpos,ypos,this ); // 显示前景图像
}
public void update( Graphics g ){
if ( offScreenG != null ) { // 如果备用屏幕创建成功
paint( offScreenG );
g.drawImage( offScreenImg,0,0,this );
} // 将备用屏幕内容画到当前屏幕上
else
paint(g); // 直接将图像内容画到当前屏幕上
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -