You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:06:23