游戏与现实时间流速的单位换算

通常游戏中的时间,与现实时间有很大的区别。

比如说策划会给我们类似的需求:在游戏中的一天,在现实世界中只有12分钟

这个时候就需要用到单位换算,为了防止切换地图影响时间,我们以现实时间为准,推导出如下结论:

500ms=0.5s=1m,30s=1h,12m=一天 

由此可以通过如下步骤求解:

 

第一步,通过时间戳,算出当前已经过去的毫秒数

    /// <summary>
    /// 转换时间戳 
    /// </summary>
    public static long TimestampLongTicks()
    {
        DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
        return (DateTime.Now.Ticks - startTime.Ticks);
    }

    public static long TimestampLongMs()
    {
        return TimestampLongTicks() / 10000;
    }

    /// <summary>
    /// 获得今天的毫秒数
    /// </summary>
    public static long TimestampLongDay()
    {
        var sysTime = TimestampLongMs();
        int sysTimeZone = 8;//给定时间戳的时区
        return (sysTime + sysTimeZone * 3600000) % 86400000; 
    }

 

 

第二步,通过当前已过去的毫秒数,算出游戏时间的时分,代码片段如下

            //通过时间戳计算出当前游戏时间
            var _num = TimestampLongDay();
            //获取当前秒数
            var _ms = _num %720000;
            gameTime = _ms / 500;
            h = (int)gameTime / 60;
            m = (int)gameTime % 60;

 

 

第三步,封装为显示出来的游戏时间并进行整点播报(可省略),代码片段如下:

            gameTimeStr = "";
            var _beforeH = "";
            if (h <= 9) _beforeH = "0";
            gameTimeStr += _beforeH + h + ":";
            var _beforeM = "";
            if (m <= 9) _beforeM = "0";
            gameTimeStr += _beforeM + m;            

            Debug.Log(GameTimeStr);

            if (m == 0) Debug.LogError("整点播报");

 

打印测试结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值