在时间段之后更改变量值

时间:2014-04-17 13:08:52

标签: c++ visual-c++

我是C ++编程的新手,我正在创建一个与太空入侵者类似的游戏。

我想要做的是有一个bool值,“player.shield”,当为假时,20秒后它会将值更改回true。

我将如何解决这个问题?

感谢任何帮助:D

3 个答案:

答案 0 :(得分:1)

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

MSDN documentation

答案 1 :(得分:0)

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

即。而不是可能有几十个可以在任何时间以任何顺序触发的计时器,而是创建一个这样的函数:

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.
}

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

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

答案 2 :(得分:-1)

这里有a link到c ++计时器参考。

1)设置&#34; player.shield = true&#34;

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);
}