控制每秒刷新固定帧数,线程休眠、等待哪个更合理解决办法
控制每秒刷新固定帧数,线程休眠、等待哪个更合理
TIME_IN_FRAME = 50;//50毫秒
想请教一下那种方式更合理,或者有更专业的解决方案
(直接隐约记得那篇文章中说每次线程休眠的时间不同会有不良影响,不过具体是不是会有影响,产生影响原因是神马也没有深究,故有哪位大牛了解的话也请不吝赐教,万分感谢)
------解决方案--------------------
顶一下。
------解决方案--------------------
帮顶!!
------解决方案--------------------
不用顶了,推荐你看看Andrew Davison的《Killer Game Programming in Java》这本书,里面就有现成的程序
------解决方案--------------------
3楼正解,你的两种方法都有问题。
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( )