C#循环中如何实现整数B随整数A每递增1同步递减1
C# 循环内秒级联动数值递减实现方案
你现有代码缺两个关键逻辑:一是没有保存A(游戏时间秒数)的历史值,根本没法判断时间是否推进;二是空跑的while循环会直接占满CPU核心,导致游戏卡帧。具体实现按下面来:
- 循环外多声明一个变量存上一次检测到的游戏秒数,作为时间变化的对比基准
- 每次循环算出当前秒数后,和基准值做差,时间过了几秒就给
B减几,兼容卡顿、跳帧导致的时间跳变,不会出现计数不准的问题 - 检测到时间推进后,把基准值更新为当前秒数,留到下一轮循环对比
- 循环里加1毫秒的线程休眠,避免空转耗CPU,这个延迟对游戏逻辑完全没影响
完整实现代码
using System.Threading; // 引入Thread.Sleep的命名空间,已引入可忽略 public bool TimeLeft; public void Process() { // 初始化B值 int B = (int)Game.LocalPlayer.Character.TravelDistanceTo(spawnPoint) * 3; // 初始化时间基准为进入循环时的游戏秒数 int lastRecordedSec = (int)(Game.GameTime / 1000); while (TimeLeft) { // 每轮tick计算当前游戏秒数A int currentA = (int)(Game.GameTime / 1000); // 计算距离上一次检测过了多少秒 int timePassed = currentA - lastRecordedSec; if (timePassed > 0) { // 过了几秒B就对应减几 B -= timePassed; // 按需开启:避免B减成负数 // if (B < 0) B = 0; // 更新时间基准值 lastRecordedSec = currentA; // 这里写B值变化后要触发的自定义逻辑 } // 休眠1ms防止CPU空转 Thread.Sleep(1); } }
避坑提示
- 别只在循环里声明
A不存历史值:没有对比基准根本判断不出时间涨了多少,触发不了B的递减 - 别写无等待的死循环:空跑while会占满一个CPU核心,直接导致程序无响应、帧率暴跌
- 别硬写判断
A == 上次值 + 1:如果遇到线程调度延迟、游戏掉帧,单次循环可能跨好几秒,按时间差递减不会出现B少减的bug
内容的提问来源于stack exchange,提问作者ZPhDevs
相关产品推荐
相关产品推荐

