首页 > 学院 > 开发设计 > 正文

如何控制游戏中的FPS

2019-11-18 16:17:40
字体:
来源:转载
供稿:网友

    有人说游戏就是动画,就象电影一样将一幅幅画面展现给我们!

   游戏中有个关键的部分叫做FPS

     在计算机图像领域中,“FPS”是词组“Frames Per Second”的缩写。“Frames Per Second”在计算机图像范畴内被翻译为:“每秒传输帧数”。更确切的解释,就是“每秒中填充图像的帧数(帧/秒)“。这里的“FPS”就是我们常在CS游戏里说的“FPS”值,也可以理解为我们常说的“刷新率(Hz)”。

   而当刷新率太低时我们肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观产生不好的影响。在FPS游戏例如CS中也是一样的,游戏里的每一帧就是一幅静止画面,而“FPS”值越高也就是“刷新率”越高,每秒填充的帧数就越多,那么画面就越流畅。

   为什么我们要专门涉及到FPS ,有人说使用线程Thread.sleep(一定时间)再描绘不就可以了吗!

   但实际游戏中不是这样的 游戏地图的载入,图象的描绘都要消耗时间。有时多有时少,在这样的情况下我们使用Thread.sleep定时描绘会出现画面卡,不连贯的现象!

     在此我们给出一个简单的控制FPS的方法,很简单就是判断间隔时间,时间<1000/FPS,那么等待一定时间,直到>=1000/FPS,那么继续!在此使用Funmobile公司的一段代码做为演示!!

Thread lThread=new Thread();//创立线程

 lThread.start();//线程启动

public void run()
    {
        Thread pThreadTemp = Thread.currentThread();
        do
        {
            if(pThreadTemp != lThread)// 判断当前线程是否为主线程 若不是返回
                break;
            long lTimeStart = System.currentTimeMillis();
            System.out.PRintln("run");  
           

 repaint(0, 0, lWidth, lHeight);
            serviceRepaints(); //这是强制描绘 这2个描绘每次消耗的时间不一定相等


            long lTimeTaken = System.currentTimeMillis() - lTimeStart;

//获取时间间隔
            if(lTimeTaken < (long)60) //若小于1000/FPS,等待剩余时间
                try
                {
                    synchronized(this)
                    {
                        Thread.sleep((long)60 - lTimeTaken);
                    }
                }
                catch(InterruptedException e)
                {
                    System.out.println("error=".concat(String.valueOf(String.valueOf(e))));
                }
        } while(true);
    }


这样做可以使画面刷新稳定,画面流畅连贯!感谢丁丁最近一段时间对我学习的帮助!

本文仅代表个人观点,大家有好的建议或方案可以到论坛提出!

转载注明出处 J2MEDEV

(出处:http://www.VeVb.com)



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表