计数器的代码的原理分析

通常使用计数器进行计时、会使用系统时间或者游戏时间而得出、比如windows有从windows启动到现在的时间函数、而SDL也有从游戏启动到现在的时间函数、但莪们使用计数器能使用的条件就是据此来计算出莪们需要的游戏时间、

下面先让莪介绍一下这些变量含意

getSDL: 游戏从开始到现在的时间

start:开始的时间点

pause: 暂停的时间点

used: 使用时间

wait: 等待时间

绿色条:使用时间

蓝色条:等待时间

假设游戏开始马上开始计数、赋值start当前秒数为游戏开始时间、也就是0(实际上这不大可能、然后游戏初始化肯定会花费些时间、大概会花几十毫秒的时间吧)、所以时间使用时间就是used = getSDL - start

玩家按下暂停时间键、此时出现暂停点、所用时间固定为当前的uesd = getSDL - start、

玩家按下暂停后、使用时间停止、使用时间一直停留为当时按下暂停前停留的那一刻、而游戏启动时间的getSDL仍然在持续增加、但不会增加使用时间

玩家再次按下暂停键、重启计数器、这时、重置开始点Start、这时置换等待时间和使用时间轴、把等待时间放置在Start之后、从而保证Start之前始终为无用的等待时间、Start之前为使用时间、非暂停状态下、公式再次适用、 used = getSDL - start

经过了一段时间的使用、玩家再次按下暂停键、pause重新设定为当前getSDL获得的时间点、如之前所说、暂停后、使用时间不再增加、使用时间总是固定为按下暂停那刻的时间点减去开始点、也就是 used = getSDL - start

 再次重复之前的样子、使用时间不再增长、等待时间不断的再增长、请记住、以下公式总是成立 getSDL = wait + used、 也就是游戏启动时间总是恒等于等待时间加上游戏使用时间、由于游戏启动时间是不断增长的状态、所以不是游戏使用时间增加了就是等待时间增加了

然后玩家再按下暂停键、重开游戏、开始时间点被重设、 start = getSDL - used、等待时间被合并、并且与游戏使用时间置换、从而保证start始终在等待时间之后、现在游戏使用时间再次等于used = getSDL -start

关于游戏的实现的源代码、可以去http://lazyfoo.net/SDL_tutorials/lesson13/index.php这里下载、注意那里把used使用时间叫做pause、与这时的描述不同

原文地址:https://www.cnblogs.com/klobohyz/p/2602352.html