我有一个问题,我的框架限制器的工作非常不精确。我将目标帧设置为每秒30,但得到的值介于10 and和500 and之间。我想我犯了一个很大的错误,但我找不到。这是应该限制FPS的类:
public class FrameLimiter {
private long interval;
private long startTime;
private long endTime;
private long timeForOneFrame;
/** Limits an unlimited loop.
* You should select a value above 25FPS!
* @param FPS the target value of frames per second
*/
public FrameLimiter(int FPS){
interval = 1000/FPS;
startTime = System.currentTimeMillis();
}
/** Calling this method stops the current thread until enough time elapsed to reach the target FPS.
*/
public void limit(){
endTime = System.currentTimeMillis();
timeForOneFrame = endTime - startTime;
if (timeForOneFrame < interval)
try {
Thread.sleep(interval - timeForOneFrame);
} catch (InterruptedException e) {
e.printStackTrace();
}
startTime = System.currentTimeMillis();
}
/** Returns the current FPS measured against the time between two calls of limit().
* This method just works in combination with limit()!
* @return the current FPS.
*/
public int getFPS(){
if(timeForOneFrame <= 0){
return 0;
}else{
return (int) (1000/timeForOneFrame);
}
}
}
我用这样的方式上课:
@Override
public void onDrawFrame(GL10 gl) {
this.render();
Log.d(toString(), String.valueOf(limiter.getFPS())+ "FPS");
limiter.limit(); //has to be the last statment
}
我会感谢你的每一个帮助。
发布于 2016-09-20 06:30:36
System.currentTimeMillis();
在Android (是中断)使用中,这个函数非常不精确:
SystemClock.elapsedRealtime();
和
SystemClock.sleep(millis); //not need try block, instead of
Thread.sleep(millis);//need try block
发布于 2014-02-21 00:18:16
无论您有什么好的理由,我强烈建议不要在函数中使用the ()。
我在Android中开发了许多游戏,这些游戏在几乎所有的Android设备上都运行得很好。
往这边走。方向向量* Delta *值(它是一个对象,应该在1秒内移动)
δ为(滴答- LastTick) / 1000.f;
滴答是ms
https://stackoverflow.com/questions/21918506
复制相似问题