站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题java动画——连续图像绘制

java动画——连续图像绘制

摘要: java动画——连续图像绘制
java动画——连续图像绘制



// 程序:连续图像绘制

// 范例文件:SerialImage.java



import java.awt.*;

import java.applet.*;

import java.awt.image.*;



public class SerialImage extends Applet implements Runnable

{

int AppletWidth,AppletHeight,currentImage;

Image Animation[],SerialImage,OffScreen;

Thread newThread; //新线程

Graphics drawOffScreen;

MediaTracker MT;



ImageProducer Source; //连续图像来源

CropImageFilter CutImage; //用来剪裁图像



public void init()

{

MT = new MediaTracker(this);

Animation = new Image[8]; //8张图像

currentImage = 0; //目前图像为第一张



AppletWidth = getSize().width; //Applet的宽度

AppletHeight = getSize().height; //Applet的高度



//次画面及绘制工具

OffScreen = createImage(AppletWidth,AppletHeight);

drawOffScreen = OffScreen.getGraphics();



//获得连续图像

SerialImage = getImage(getDocumentBase(),"Images/serial.gif");

MT.addImage(SerialImage,0);

try

{

showStatus("图像加载中..."); //在状态列显示信息

MT.waitForAll();

}

catch(InterruptedException E)

{

E.printStackTrace(); //打印错误信息

}



//剪裁连续图像

Source = SerialImage.getSource();

for(int i=0;i<8;i++)

{

CutImage = new CropImageFilter(i*250,0,250,250);



Animation[i]

= createImage(new FilteredImageSource(Source,CutImage));



drawOffScreen.drawImage(Animation[i],0,0,this);

}

}



public void start() //start()函数

{

newThread = new Thread(this); //建立与启动新线程

newThread.start();

}



public void stop() //stop()函数

{

newThread = null; //将线程设为null

}



public void paint(Graphics g)

{

//下面这行的作用为清除次画面

drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);



//下面这行的作用为在次画面上绘制目前图像

drawOffScreen.drawImage(Animation[currentImage],0,0,this);



//将次画面贴到主画面上

g.drawImage(OffScreen,0,0,this);

}



public void update(Graphics g) //update()函数

{

paint(g); //只单纯调用paint()函数

}



public void run()

{

while(newThread != null) //动画循环

{

repaint(); //重新绘制图像



try

{

Thread.sleep(80); //暂停程序执行80毫秒

}

catch(InterruptedException E){ }



currentImage = (++currentImage) % 8; //指定目前图像

}

}

}

除了运行速度,我们还得考虑文件的大小。我们知道每种文件都有一定的格式,其中记录相应的文件信息,我们可以建立一个word文件,即使文件内容为空,文件的大小也不是0,同样的图片也是这样。往往游戏中要使用好多的图片,但就这些信息就会占据相当的空间。所以有时我们可以看好多的游戏为了节省空间,就将所有的图片包含在了一个文件中。



对于这样放置的一字排开的图片我们可以根据图片的大小。计算得到每张图片,并将其复制到一个图片数组中。这样就可以像前面的方法一样使用了。

1、//获得连续图像

SerialImage = getImage(getDocumentBase(),"Images/serial.gif");



2、//剪裁连续图像

Source = SerialImage.getSource();

for(int i=0;i<8;i++)

{

CutImage = new CropImageFilter(i*250,0,250,250);



Animation[i]

= createImage(new FilteredImageSource(Source,CutImage));



drawOffScreen.drawImage(Animation[i],0,0,this);

}




↑返回目录
前一篇: java动画——使用双缓冲区
后一篇: java动画——二维连续图像播放