gpt4 book ai didi

c++ - 基于 SDL_GetTicks() 的运动?

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:57 27 4
gpt4 key购买 nike

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

简短的例子、解释、帮助,任何东西都将不胜感激。

最佳答案

我通过创建自己的 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()

每次时间到时作为回调函数。但是,移动球时,您应该重新启动计时器。 :]

关于c++ - 基于 SDL_GetTicks() 的运动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com