2017-03-26 11 views
-1

Visual Studio 2015에서 C++ 및 sdl-2로 게임을 만들고 있는데, 현재 fps 타이머를 구현하고 있지만 작동하지 않습니다. 기본 FPS 타이머 코드 : 문제FPS 타이머가 작동하지 않습니다.

#include <SDL.h> 
#include <Camera.h> 

int main() 
{ 

//create objects + camera 

float frameTime = 0.0f; 
int prevTime = 0; 
int currentTime = 0; 
float deltaTime = 0.0f; 

    while (isRunning) 
    { 

    SDL_Event ev; 

    keyState = SDL_GetKeyboardState(NULL); 

    prevTime = currentTime; 
    currentTime = SDL_GetTicks(); 
    deltaTime = (currentTime - prevTime)/1000.0f; 

    frameTime += deltaTime; 

     if (frameTime >= 0.25f) 
     { 

      if (keyState[SDL_SCANCODE_W] && !FreeRoam) 
      { 
       Object1.GetPos().z = (Object2.GetPos().z + 1); 
       camera.MoveForward(1); 
      } 
      //render 
     } 
    } 

return 0; 
} 

FPS에 타이머가 CodingMadeEasy에 의해 this 비디오에서 바로 찢어된다. 문제는 fps 타이머가 존재하지 않는 것처럼 동작하므로이 문제를 어떻게 해결합니까?

+0

다음은 타이밍이 형태 보증 방식으로 필요로 처리하기 위해''에 대해 알아보세요. 유형 안전은 컴파일 시간에 시간 지속 시간과 혼동하는 시간과 같은 부주의 한 오류가 발견되었음을 의미합니다. 동영상 자습서 : https://www.youtube.com/watch?v=P32hvk8b13M –

답변

1

코드를 읽어보십시오. 두 줄 사이의 시간을 계산하고 있습니다.

prevTime = currentTime; 
currentTime = SDL_GetTicks(); 
deltaTime = (currentTime - prevTime)/1000.0f; 

이것은 의미가 없습니다. 두 루프의 반복 사이의 시간을 원하는, 그래서 당신은 루프의 경계에이 라인을 분할 할 수 있습니다

while (isRunning) 
{ 
    prevTime = currentTime; // Right here, in the loop's beguining 

    SDL_Event ev; 

    keyState = SDL_GetKeyboardState(NULL); 

    if (frameTime >= 0.25f) 
    { 

     if (keyState[SDL_SCANCODE_W] && !FreeRoam) 
     { 
      Object1.GetPos().z = (Object2.GetPos().z + 1); 
      camera.MoveForward(1); 
     } 
     //render 
    } 

    //End of the loop 

    currentTime = SDL_GetTicks(); 
    deltaTime = (currentTime - prevTime)/1000.0f; 

    frameTime += deltaTime; 
} 
+1

upvoted, 문제를 해결하고 답을 설명해 주셔서 감사합니다! – DogWalkersCoding

1

프레임 업데이트 후 frameTime을 0으로 재설정하지 않은 것처럼 보입니다.

+0

향후 독자 : 올바른 대답입니다. 현재 허용 된 대답은 OP의 논리를 변경하지 않으며이 대답이 지적하는 버그를 반복합니다. –