我是C ++编程的新手,我正在创建一个与太空入侵者类似的游戏。
我想要做的是有一个bool值,“player.shield”,当为假时,20秒后它会将值更改回true。
我将如何解决这个问题?
感谢任何帮助:D
答案 0 :(得分:1)
可以通过Win32 API函数SetTimer
完成,您可以在其中注册回调以更新值。
答案 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);
}