快速业务通道

JAVA图形操作中FPS的计算 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

JAVA图形操作中FPS的计算

时间:2011-08-18

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

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

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

代码如下:

JAVA图形操作中FPS的计算 - 编程入门网

FPS部分相关源码:

package org.test;import java.text.DecimalFormat;/*** <p>Title: LoonFramework</p>* <p>Description:</p>* <p>Copyright: Copyright (c) 2007</p>* <p>Company: LoonFramework</p>* @author chenpeng  * @email:ceponline@yahoo.com.cn* @version 0.1*/public class FPSListen {    //设定动画的FPS桢数,此数值越高,动画速度越快。    public static final int FPS = 500;      // 换算为运行周期    public static final long PERIOD = (long) (1.0 / FPS * 1000000000); // 单位: ns(纳秒)    // FPS最大间隔时间,换算为1s = 10^9ns    public static long FPS_MAX_INTERVAL = 1000000000L; // 单位: ns        // 实际的FPS数值    private double nowFPS = 0.0;        // FPS累计用间距时间    private long interval = 0L; // in ns    private long time;    //运行桢累计    private long frameCount = 0;        //格式化小数位数    private DecimalFormat df = new DecimalFormat("0.0");    //开启opengl    public void opengl(){        System.setProperty("sun.java2d.opengl", "True");        System.setProperty("sun.java2d.translaccel", "True");    }      /** *//**     * 制造FPS数据     *     */    public void makeFPS() {        frameCount++;        interval += PERIOD;        //当实际间隔符合时间时。        if (interval >= FPS_MAX_INTERVAL) {            //nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位            long timeNow = System.nanoTime();            // 获得到目前为止的时间距离            long realTime = timeNow - time; // 单位: ns            //换算为实际的fps数值            nowFPS = ((double) frameCount / realTime) * FPS_MAX_INTERVAL;            //变更数值            frameCount = 0L;            interval = 0L;            time = timeNow;        }    }    public long getFrameCount() {        return frameCount;    }    public void setFrameCount(long frameCount) {        this.frameCount = frameCount;    }    public long getInterval() {        return interval;    }    public void setInterval(long interval) {        this.interval = interval;    }    public double ge

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号