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

当前页面: 开发资料首页Java 专题java动画——使用过高的FPS

java动画——使用过高的FPS

摘要: java动画——使用过高的FPS
java动画——使用过高的FPS





// 程序:使用过高的FPS

// 范例文件:DropFrame.java



import java.awt.*;

import java.applet.*;



public class DropFrame extends Applet implements Runnable

{

int SPF; //动画播放的SPF

int currentImage; //目前图像

Image Animation[]; //动画图像

MediaTracker MT; //图像追踪器



Thread newThread; //新线程



Image OffScreen; //次画面

Graphics drawOffScreen; //绘制次画面的Graphics实体



//===============init()函数和第一版本相同===========================

public void init()

{

SPF = 11; //相当于90FPS



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

Animation = new Image[8]; //与使用八张动画图像

MT = new MediaTracker(this);



for(int i=0;i<8;i++) //注意此循环中的程序代码

{

Animation[i]

= getImage(getDocumentBase(),"Images/Freedom" + (i+1) + ".gif");



MT.addImage(Animation[i],0);

}



try

{

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

MT.waitForAll(); //等待所有图像下载

}

catch(InterruptedException E){ }



OffScreen = createImage(250,250); //建立次画面

drawOffScreen = OffScreen.getGraphics(); //取得次画面的绘制类

}

//==================================================================



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

{

//建立与启动新线程

newThread = new Thread(this);

newThread.start();

}



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

{

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

}



//==================================================================



public void paint(Graphics g) //已将差劲的动画循环抽离

{

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

drawOffScreen.setColor(Color.black);

drawOffScreen.fillRect(0,0,250,250);



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

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



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

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

}



public void update(Graphics g)

{

paint(g);

}



//===============新的动画循环在此===================================

public void run()

{

while(newThread != null)

{

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



try

{

Thread.sleep(SPF); //使用指定的SPF

}

catch(InterruptedException E){ }



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

}

}

}







有前面的例子,可能大家注意到了,播放动画的速度使用代码控制的,更本上说就是在线程的run()方法中的Thread.sleep();控制。如果里面的参数越小,动画播放数度越快。所以这个例子就是将这里的参数变量化,起到可控的目的。可以修改一下SPF试试。




↑返回目录
前一篇: java动画——二维连续图像播放
后一篇: java动画——电子小时钟