ループが実行されるたびに、czas は現在の時刻に更新されます。解決策: ループの外に移動します。
int czas = SDL_GetTicks();
while(1)
{
int tajmer;
tajmer = SDL_GetTicks() - czas;
if(tajmer > 1000)
{
MoveUp();
czas = SDL_GetTicks();
}
}
ただし、達成しようとしているのは、組み込みのタイマーを使用してより良い方法で実行できる可能性があります:
http://wiki.libsdl.org/SDL_AddTimer
編集:
SDL_AddTimerを使った例。
Uint32 my_callbackfunc(Uint32 interval, void *param);
int main() {
... // don't forget to SDL_Init
...
SDL_AddTimer(1000, my_callbackfunc, NULL);
...
}
Uint32 my_callbackfunc(Uint32 interval, void *param)
{
MoveUp();
return(1000); // or however long to wait before my_callbackfunc should run.
}
現在クラスを使用していて、MoveUp() というクラスのメソッドを呼び出したい場合は、おそらく次のようにします。
class example {
...
void start_moving() {
SDL_AddTimer(1000, my_callbackfunc, (void*)this);
}
...
public void MoveUp() {
...
}
}
Uint32 my_callbackfunc(Uint32 interval, void *param) {
((example*)param)->MoveUp();
return (1000);
}