开发学院软件开发Java 如何控制游戏中的FPS 阅读

如何控制游戏中的FPS

 2007-12-23 12:29:24 来源:WEB开发网   
核心提示: 有人说游戏就是动画,就象电影一样将一幅幅画面展现给我们! 游戏中有个关键的部分叫做FPS 在计算机图像领域中,如何控制游戏中的FPS,“FPS”是词组“Frames Per Second”的缩写,“Frames Per Second”在计算机图像范畴内被翻译为:“每秒传输帧数”,那么继续!在此使用Funmobile

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

  游戏中有个关键的部分叫做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.cncms.com)


Tags:如何 控制 游戏

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接