SDL_GetTicks() - 基于运动?

时间:2011-10-12 21:45:01

标签: c++ sdl

我正在用OpenGL和SDL编写一个乒乓球游戏。我对SDL_GetTicks()如何工作知之甚少,但我正在努力想出一种方法来实现如何使我的球移动,例如每1000毫秒是我的新手。

简短的例子,解释,帮助,任何事情都将受到极大的赞赏。

2 个答案:

答案 0 :(得分:0)

Ye Olde Fix Your Timestep!

您不必使用RK4,“最后两个SIM状态之间的插值”是重要的部分。

答案 1 :(得分:0)

我通过创建自己的Timer类来解决它。 从技术上讲,你所做的是在构造函数中使用GetTicks()

分配一个开始的毫秒值
Timer::Timer(uint32_t ToWait, void (*call_back)(void*), void* context) : Callback(call_back), Context(context), Running(true), ToWait_private(ToWait)
{
    StartTicks = SDL_GetTicks();
}

现在你实现了一个update()函数,每次都保存当前的刻度

void Timer::Update()
{
    if(!Running)
        return;

    CurrentTicks = SDL_GetTicks(); //get the current ticks

    if(CurrentTicks - ToWait > StartTicks) //if the ticks are more than how much to wait
    {
        Running = false;

        Callback(Context); //call my callback or whatever
    }
}

这不是所有代码,但它应该给你一个关于如何实现它的观点。由于SDL_ticks正在计算毫秒数,因此您还可以实现一些转换功能,以便在几秒钟内设置时间。

在你的游戏机制中,你需要等待,创建一个实例。然后,调用计时器的Update()。好的是它不必定期调用,因为SDL_getTicks每次都会给你一个值。

问题是设置一个函数的回调,取决于它是否是成员函数,那么你应该使用一些包装器。在静态函数的情况下,没有什么可担心的,只需使用经典指针来起作用。 Lambda和许多其他东西,stoppin,pausding计时器也可以实现,只需要有创意:]

最后回答关于如何让球移动的问题,你可以打电话给

Move()

每次时间都起到回调的作用。移动球时,应该重新启动计时器。 :