首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

控制每秒刷新固定帧数,线程休眠、等待哪个更合理解决办法

2012-01-08 
控制每秒刷新固定帧数,线程休眠、等待哪个更合理TIME_IN_FRAME 50//50毫秒Java codelong startTime Sy

控制每秒刷新固定帧数,线程休眠、等待哪个更合理
TIME_IN_FRAME = 50;//50毫秒

Java code
long startTime = System.currentTimeMillis();  //一帧的绘制运算 消耗时间不同...      /** 计算出更新本次帧所消耗的毫秒数 **/  int diffTime = (int) (System.currentTimeMillis() - startTime);                      /** 确保每次更新时间为50帧 **///方式1 线程休眠时间不同的影响需要查一下,再决定用何种方式try {    Thread.sleep(TIME_IN_FRAME-diffTime);} catch (InterruptedException e) {    e.printStackTrace();}//方式2 用线程等待while (diffTime <= TIME_IN_FRAME) {      diffTime = (int) (System.currentTimeMillis() - startTime);      //线程等待       Thread.yield();  }

想请教一下那种方式更合理,或者有更专业的解决方案
(直接隐约记得那篇文章中说每次线程休眠的时间不同会有不良影响,不过具体是不是会有影响,产生影响原因是神马也没有深究,故有哪位大牛了解的话也请不吝赐教,万分感谢)

[解决办法]
顶一下。
[解决办法]
帮顶!!
[解决办法]
不用顶了,推荐你看看Andrew Davison的《Killer Game Programming in Java》这本书,里面就有现成的程序
[解决办法]
3楼正解,你的两种方法都有问题。
Java code
public void run( )    /* Repeatedly: update, render, sleep so loop takes close       to period ms */    {      long beforeTime, timeDiff, sleepTime;      beforeTime = System.currentTimeMillis( );      running = true;      while(running) {        gameUpdate( );        gameRender( );        paintScreen( );        timeDiff = System.currentTimeMillis( ) - beforeTime;        sleepTime = period - timeDiff;   // time left in this loop        if (sleepTime <= 0)  // update/render took longer than period          sleepTime = 5;    // sleep a bit anyway        try {          Thread.sleep(sleepTime);  // in ms        }        catch(InterruptedException ex){}        beforeTime = System.currentTimeMillis( );      }      System.exit(0);    } // end of run( ) 

热点排行