首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android OpenGL ES:每秒限制帧数

Android OpenGL ES:每秒限制帧数
EN

Stack Overflow用户
提问于 2014-02-20 20:13:03
回答 2查看 1.5K关注 0票数 0

我有一个问题,我的框架限制器的工作非常不精确。我将目标帧设置为每秒30,但得到的值介于10 and和500 and之间。我想我犯了一个很大的错误,但我找不到。这是应该限制FPS的类:

代码语言:javascript
复制
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);
      }
  }
}

我用这样的方式上课:

代码语言:javascript
复制
@Override
public void onDrawFrame(GL10 gl) {            
    this.render();

    Log.d(toString(), String.valueOf(limiter.getFPS())+ "FPS");
    limiter.limit();    //has to be the last statment
}

我会感谢你的每一个帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-20 06:30:36

代码语言:javascript
复制
System.currentTimeMillis();

在Android (是中断)使用中,这个函数非常不精确:

代码语言:javascript
复制
SystemClock.elapsedRealtime();

代码语言:javascript
复制
SystemClock.sleep(millis); //not need try block, instead of 

Thread.sleep(millis);//need try block
票数 1
EN

Stack Overflow用户

发布于 2014-02-21 00:18:16

无论您有什么好的理由,我强烈建议不要在函数中使用the ()。

我在Android中开发了许多游戏,这些游戏在几乎所有的Android设备上都运行得很好。

往这边走。方向向量* Delta *值(它是一个对象,应该在1秒内移动)

δ为(滴答- LastTick) / 1000.f;

滴答是ms

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21918506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档