2013-02-27 3 views
0

저는 Timer 클래스를 가지고 있지만, 변수의 값을 변경하려고 할 때마다 변수는 0으로 유지됩니다. SDL_GetTicks()은 예상되는 값을 반환하지만 해당 값을 변수에 할당하려고하면 해당 변수는 0으로 유지됩니다. 숫자로 하드 코딩을 시도했지만 변수는 여전히 0으로 유지됩니다. 내 Main 클래스의 변수는 정상적으로 작동하지만,이 중 하나를 변경하려고 시도하면 작동하지 않습니다. 또한 timeSinceCreation() 메서드는 0을 반환합니다. 당신의 printf 통화가 일치하지 않는 유형이 있기 때문에C++ 변수가 변경되지 않습니다

#include "Timer.h" 
#include "SDL.h" 

Timer::Timer() : m_timeOfLastCall(0.0f) 
{ 
SDL_Init(SDL_INIT_TIMER); 
} 

Timer::~Timer() {} 

float Timer::timeSinceCreation() 
{ 
return SDL_GetTicks(); 
} 

float Timer::timeSinceLastFrame() 
{ 
float thisTime = timeSinceCreation(); 
float deltaTime = thisTime - m_timeOfLastCall; 
m_timeOfLastCall = thisTime; 
printf("%u ms \n", thisTime); 
return deltaTime; 
} 
+0

출력이 잘못되었을 수 있습니까? 'printf ("%. 8e ms \ n");'를 시도하거나 'stdio'형식 문자열에 대한 문서를보십시오. –

+0

귀하의 진술이 혼란스러워 보입니다. 'SDL_GetTicks()'가 올바른 값을 반환하고'timeSinceCreation()'이 0을 반환한다고 말합니다. – Mahesh

답변

1

코드는 (%uunsigned int 필요하지만, 당신은 float에 전달하는) 동작을 정의되지 않은있다. 따라서 합당한 행동을 기대해서는 안됩니다.

+0

아하! 고마워, % f로 바꿨다. 감사! – user2117614

+0

@ user2117614 : 사실, 내가 너라면, 모든 변수의 유형을 [Uint32] (http://www.libsdl.org/tmp/SDL-1.3-docs/SDL__stdinc_8h.html#d020192d056a8515c4c779266da4064a)로 변경하고, 이는 [SDL_GetTicks] (http://www.libsdl.org/docs/html/sdlgetticks.html)에 의해 반환 된 값의 유형입니다. – Mankarse

관련 문제