我正确计算我的FPS吗?

Cya*_*ime 3 c++ sdl frame-rate

所以我想知道我是否正确计算我的FPS:

Uint32 delayFrom(float startTime, float endTime){
    return(endTime - startTime );
}


int main(){
    int numFrames = 0;
    Uint32 startTime = SDL_GetTicks();
    while(!done){
        frameTime = 0;
        float fps = ( numFrames/(float)(SDL_GetTicks() - startTime) )*1000;
        cout << fps << endl;
        SDL_Delay(delayFrom(frameTime, 1/60));
        ++numFrames;
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*rik 6

int main() {
  int numFrames = 0;
  Uint32 startTime = SDL_GetTicks();
  while (!done) {
    ++numFrames;
    Uint32 elapsedMS = SDL_GetTicks() - startTime; // Time since start of loop
    if (elapsedMS) { // Skip this the first frame
      double elapsedSeconds = elapsedMS / 1000.0; // Convert to seconds
      double fps = numFrames / elapsedSeconds; // FPS is Frames / Seconds
      cout << fps << endl; 
    }
    SDL_Delay(1.0/60.0); // Use floating point division, not integer
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @relaxxx:好吧,在除法之前检查 elapsedMS 或 elapsedSeconds - 除以 0 有点烦人,与典型游戏框架中完成的工作相比,对 0 的单个测试根本不重要。但是,是的,当然可以编写循环来避免此检查 - 如果您愿意赌博/确保第一帧不会在 0 毫秒内完成 (2认同)
  • 请注意,此代码可能无法执行您想要的操作.如果您的程序以60 FPS运行一小时然后降至1 FPS,您将看到FPS计数器从60非常缓慢地下降. (2认同)