在时间段后更改变量值

Changing variable value after time period

本文关键字:改变 变量值 时间段      更新时间:2023-10-16

我对C++编程相当陌生,我正在创建一个与太空侵略者大致相似的游戏。

我想做的是有一个布尔值"player.shield",当它是假的,20秒后它会将值改回true。

我将如何去做?

任何帮助都值得赞赏:D

它可以通过 Win32 API 函数SetTimer来完成,您可以在其中注册回调以更新值。

MSDN 文档

取决于平台、您使用的库等。通常,即使您可以使用一些或多或少的异步计时器,在游戏中,这通常在主循环中以不同的方式完成,主循环以受控方式处理所有游戏机制。

也就是说,与其拥有数十个可以随时以任何顺序触发的计时器,不如创建这样的函数:

void onGameTick()
{
   DWORD currentTime = ::GetTickCount();
   if (player.shield && currentTime - player.shieldAcquiredTime < 20) {
     player.shield = false;
     // You can also do other things here like trigger a sound effect etc.
   }
   // Do other logic, like move players, enemies, shots etc.
}

然后在每次屏幕更新之前或通过计时器或其他方式调用此函数。

通过使用这种技术,您可以非常明确地对游戏状态进行任何更改,始终以相同的顺序完成,以线性方式轻松调试,避免可能的多线程数据争用等。

下面是指向 c++ 计时器参考的链接。

1( 设置 "player.shield = true">

2( 启动计时器

#include <ctime>
inline void timeSec(clock_t sec) 
{
    clock_t start_time = clock();
    clock_t end_time = sec * 1000 + start_time
    while(clock() != end_time);
}