JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)

FPS:即帧 /秒(frames per second)的缩写,也称为帧速率。是指1秒钟时间里刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。如果具体到手机上就是指每秒钟能够 播放(或者录制)多少格画面。同时越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(fps)越多,所显示的动作就会越流畅。 

在绝大多数图形程序中(以游戏类为典型),执行效率都以FPS作为评估标准。

由于目前JAVA方面缺少相关用例,故完成功能如下图(在本机测试中,最大fps设定为500,实际达到FPS效率在IDE中280左右,单独运行380左右,受系统配置等因素影响):

代码如下:JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)(请变更文件后缀为jar)

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)

FPS相关操作代码如下:
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)package org.test;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.text.DecimalFormat;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Title: LoonFramework</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Description:</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Copyright: Copyright (c) 2007</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Company: LoonFramework</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
@author chenpeng  
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * @email:[email]ceponline@yahoo.com.cn[/email] 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
@version 0.1
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) 
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
public class FPSListen {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
//设定动画的FPS桢数,此数值越高,动画速度越快。
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    public static final int FPS = 500;  
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 换算为运行周期
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    public static final long PERIOD = (long) (1.0 / FPS * 1000000000); // 单位: ns(纳秒)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// FPS最大间隔时间,换算为1s = 10^9ns
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    public static long FPS_MAX_INTERVAL = 1000000000L// 单位: ns
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 实际的FPS数值
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private double nowFPS = 0.0;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// FPS累计用间距时间
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private long interval = 0L// in ns
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private long time;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
//运行桢累计
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private long frameCount = 0;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
//格式化小数位数
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private DecimalFormat df = new DecimalFormat("0.0");
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
//开启opengl
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    public void opengl(){
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        System.setProperty(
"sun.java2d.opengl""True");
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        System.setProperty(
"sun.java2d.translaccel""True");
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 制造FPS数据
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void makeFPS() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frameCount
++;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        interval 
+= PERIOD;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
//当实际间隔符合时间时。
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        if (interval >= FPS_MAX_INTERVAL) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
//nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            long timeNow = System.nanoTime();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
// 获得到目前为止的时间距离
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            long realTime = timeNow - time; // 单位: ns
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
//换算为实际的fps数值
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            nowFPS = ((double) frameCount / realTime) * FPS_MAX_INTERVAL;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
//变更数值
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            frameCount = 0L;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            interval 
= 0L;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            time 
= timeNow;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public long getFrameCount() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
return frameCount;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void setFrameCount(long frameCount) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
this.frameCount = frameCount;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public long getInterval() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
return interval;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void setInterval(long interval) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
this.interval = interval;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public double getNowFPS() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
return nowFPS;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void setNowFPS(double nowFPS) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
this.nowFPS = nowFPS;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public long getTime() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
return time;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void setTime(long time) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
this.time = time;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public String getFPS(){
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
return df.format(nowFPS);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)}

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)


球体类代码如下:
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)package org.test;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Color;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Graphics;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Title: LoonFramework</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Description:</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Copyright: Copyright (c) 2007</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>Company: LoonFramework</p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
@author chenpeng  
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * @email:[email]ceponline@yahoo.com.cn[/email] 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
@version 0.1
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) 
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
public class Ball {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
private static final int SIZE = 10;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
private int x, y;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
protected int vx, vy;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
public Ball(int x, int y, int vx, int vy) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
this.x = x;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
this.y = y;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
this.vx = vx;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
this.vy = vy;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
public void move() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            x 
+= vx;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            y 
+= vy;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
if (x < 0 || x > BallPanel.WIDTH - SIZE) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                vx 
= -vx;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
if (y < 0 || y > BallPanel.HEIGHT - SIZE) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                vy 
= -vy;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
public void draw(Graphics g) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            g.setColor(Color.RED);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            g.fillOval(x, y, SIZE, SIZE);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)}

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)



FPS及球体处理用代码如下:
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)package org.test;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Color;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Dimension;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Frame;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Graphics;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Image;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.Panel;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.event.WindowAdapter;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.event.WindowEvent;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.awt.image.BufferedImage;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
import java.util.Random;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * Title: LoonFramework
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * </p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * Description:以JAVA获取FPS用演示程序及随机生成乱数球体。(更优化代码内置于loonframework-game框架中)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * </p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * Copyright: Copyright (c) 2007
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * </p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * <p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * Company: LoonFramework
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * </p>
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
@author chenpeng
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * @email:[email]ceponline@yahoo.com.cn[/email]
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) * 
@version 0.1
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例) 
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
public class BallPanel extends Panel implements Runnable {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
private static final long serialVersionUID = 1L;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public static final int WIDTH = 360;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public static final int HEIGHT = 360;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 设定最大球体数量
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private static final int NUM_BALLS = 50;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 定义球体数组
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private Ball[] ball;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 运行状态
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private volatile boolean running = false;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
private Thread gameLoop;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 缓存用图形
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private Graphics bg;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
private Image screen = null;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 生成随机数
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private Random rand;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// fps监听
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    private FPSListen fps = null;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public BallPanel() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        setPreferredSize(
new Dimension(WIDTH, HEIGHT));
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        screen 
= new BufferedImage(WIDTH, HEIGHT, 1);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        bg 
= screen.getGraphics();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        fps 
= new FPSListen();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
//fps.opengl();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// 以当前毫秒生成随机数
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        rand = new Random(System.currentTimeMillis());
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        ball 
= new Ball[NUM_BALLS];
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// 初始化球体参数
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        for (int i = 0; i < NUM_BALLS; i++{
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
int x = rand.nextInt(WIDTH);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
int y = rand.nextInt(HEIGHT);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
int vx = rand.nextInt(10);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
int vy = rand.nextInt(10);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            ball[i] 
= new Ball(x, y, vx, vy);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
// 加入Notify
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    public void addNotify() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
super.addNotify();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// 判断循环条件是否成立
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        if (gameLoop == null || !running) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            gameLoop 
= new Thread(this);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            gameLoop.start();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 进行线程运作。
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void run() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
long beforeTime, afterTime, timeDiff, sleepTime;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
long overSleepTime = 0L;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
int noDelays = 0;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// 获得精确纳秒时间
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        beforeTime = System.nanoTime();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        fps.setTime(beforeTime);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        running 
= true;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
while (running) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            gameUpdate();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            repaint();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            afterTime 
= System.nanoTime();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            timeDiff 
= afterTime - beforeTime;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
// 换算间隔时间
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            sleepTime = (FPSListen.PERIOD - timeDiff) - overSleepTime;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
if (sleepTime > 0{
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                
// 制造延迟
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
                try {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                    Thread.sleep(sleepTime 
/ 1000000L); // nano->ms
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
                }
 catch (InterruptedException e) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                
// 获得延迟时间
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
                overSleepTime = (System.nanoTime() - afterTime) - sleepTime;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            }
 else {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                
// 重新计算
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
                overSleepTime = 0L;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                
// 判断noDelays值
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
                if (++noDelays >= 16{
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                    Thread.yield(); 
// 令线程让步
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
                    noDelays = 0;
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
// 重新获得beforeTime
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            beforeTime = System.nanoTime();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
// 制造FPS结果
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
            fps.makeFPS();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 变更球体轨迹
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
private void gameUpdate() {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
for (int i = 0; i < NUM_BALLS; i++{
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            ball[i].move();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 变更图形
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void update(Graphics g) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        paint(g);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
/**
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     * 显示图形
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)     
*/

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public void paint(Graphics g) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// 设定背景为白色,并清空图形
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        bg.setColor(Color.WHITE);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        bg.fillRect(
00, WIDTH, HEIGHT);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// FPS数值显示
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        bg.setColor(Color.BLUE);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        bg.drawString(
"FPS: " + fps.getFPS(), 416);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        
// 分别绘制相应球体
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
        for (int i = 0; i < NUM_BALLS; i++{
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            ball[i].draw(bg);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        g.drawImage(screen, 
00this);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        g.dispose();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    
public static void main(String[] args) {
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        Frame frm 
= new Frame();
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frm.setTitle(
"Java FPS速度测试(由Loonframework框架提供)");
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frm.setSize(WIDTH, HEIGHT
+20);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frm.setResizable(
false);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frm.add(
new BallPanel());
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frm.setVisible(
true);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        frm.addWindowListener(
new WindowAdapter(){
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            
public void windowClosing(WindowEvent e){
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)                System.exit(
0);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)            }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)        }
);
JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)    }

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)

JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)}


本文转自 cping 51CTO博客,原文链接:http://blog.51cto.com/cping1982/130210

上一篇:commons-collections使用介绍之Bag


下一篇:JAVA执行javascript方法