编辑: 阿拉蕾 | 2019-07-06 |
public void init() { buffer=createImage(getWidth(),getHeight());
//创建图像缓冲区 g1=buffer.getGraphics();
//创建绘图区 img=getImage(getCodeBase(),"image/飞机.gif");
star=getImage(getCodeBase(),"image/天空.JPG");
} public void paint(Graphics g) { g1.drawImage(star,0,0,this);
//将图像先画到缓冲区 g1.drawImage(img,310-x,20,this);
//将图像先画到缓冲区 g.drawImage(buffer,0,0,this);
//将缓冲区占的图像画出 try { Thread.sleep(10);
x+=2;
if (x==310) { x=2;
Thread.sleep(1000);
} } catch (InterruptedException e) {} repaint();
} public void update(Graphics g) { paint(g);
} } 编译程序LX7_7.java. 编写显示LX7_7.class的页面文件,在浏览器中显示结果如图7.7所示. 图7.7 (5)程序说明: 改进后的程序比原程序增加了Image类对象buffer和Graphics类对象g1.覆盖了update方法. 换帧速度提高到100(1000/10),飞机每次移动2个点,动画效果更加平滑而且无闪烁. 新增的buffer对象,用作屏幕缓冲区.新增的g1对象,用作屏幕绘图区.在init方法中,程序调用Image 对象的createImage 方法,按照Applet 的宽度和高度创建了屏幕缓冲区,然后调用getGraphics方法创建了Image对象buffer的绘图区.在paint方法中通过g1.drawImage改变了图像输出的方向,图像被画在屏幕缓冲区内.由于屏幕缓冲区不可见,使得画面交替时的闪烁现象也不可见.当屏幕缓冲区上的画图完成以后,再调用g.drawImage方法将整个屏幕缓冲区拷贝到屏幕上,这个过程是直接覆盖,不会产生闪烁.上述方式被称为图形双缓冲技术. 图形双缓冲技术实际上是创建了一个不可见的后台屏幕,进行幕后操作,图像画在后台屏幕上,画好之后再拷贝到前台屏幕上.这种技术圆满解决了画面交替时的闪烁,但图像显示速度变慢,内存占用较大,用户离开网页后,嵌入的Applet会继续运行,占用CPU时间. 3.使用线程创建动画的程序 程序功能:创建一个显示小球不断跳动并显示不同状态的动画程序.要达到无闪烁现象,显示速度快,占用内存较小的要求.即要使用双缓冲技术创建图像的显示方式,清除闪烁现象.使用线程分别解决准备图像、显示图像的任务,解决显示速度慢,占用内存较大的问题. (2)准备10个图像文件(T1.JPG~T10.JPG),它们分别显示小球不同时间的高度和状态,存放在"程序/image"目录下.这是创建动画的基础工作,是动画显示的内容,应用程序只是解决图像"动"即显示的方式. 编写LX7_8.java程序文件,源代码如下. 编译程序LX7_8.java. import java.awt.*;
import java.applet.*;
public class LX7_8 extends Applet implements Runnable { Image img[]=new Image[10];
Image buffer;
Graphics g1;
Thread td;
int index=0;
public void init() { buffer=createImage(getWidth(),getHeight());
//创建图像缓冲区 g1=buffer.getGraphics();
//创建绘图区 for (int i=0;
i