想了大半天实在想不出什么更适合文章的标题。。。
就现在这个标题,挺好- -
什么是浮点转时间呢?
今天写的一个计时功能,想来想去还是现在这种解决方案比较合适
先上一张图在来讲解比较明了
如图:赛车游戏的计时
计时格式为:分‘秒‘毫秒
先来个脑筋急转弯让大家乐乐
已知:
1小时=60分
1分=60秒
1秒=?毫秒
敲了四年代码今天我居然会掉进这个坑里!!估计脑袋短路了吧- -
按照这个逻辑1秒=60毫秒,这是完全错误的!1秒=1000毫秒才是正确的答案
好吧,请深深的鄙视我吧。。。
其实这篇文章没有什么高深的东西,主要说这种解决方案还是不错滴
怎么个不错法呢,听我一一道来
可以看见上图中有一个“个人记录”一栏
如果我们要把这个数据存在数据库中,咋存?
用存日期时间的方式?
用文本?
在这里我用的是浮点型
从游戏开始计算,一局游戏我到完成花费了150.12秒
我就直接把150.12存进数据库,然后读取的时候在把这个数转换成 分/秒/毫秒 这样的格式
可以看见当 分/秒/毫秒 为一位数时,会自动补0,比如:01 02 03 这样
所以我们现在要做的是,获取时间:totalTime += Time.deltaTime;
然后在相对应的计算出 分/秒/毫秒
我写了一个方法,这个方法仅供我计时用
其他地方反正用不上,就不考虑扩展性什么的了
参考一下我的思路就行!上代码
1 /// 计算时间 <summary> 2 /// 计算时间 3 /// </summary> 4 /// <param name="_Convert">欲计算的文本</param> 5 /// <param name="_point">小数点左=0;右=1</param> 6 /// <returns>返回格式 00</returns> 7 private string CalcTime(string _Convert, int _point) 8 { 9 string[] temSplit = _Convert.Split(new char[] { ‘.‘ }); 10 11 if (Convert.ToInt32(temSplit[_point]) < 10) 12 return ("0" + temSplit[_point]).Replace("-", "0"); 13 14 //被整除的时候为‘-.--‘,所以直接替换成0 15 return (temSplit[_point].Substring(0, 1) + temSplit[_point].Substring(1, 1)).Replace("-","0"); 16 }
没错,你没有看错,我用的就是这么简单的方法
调用的代码
1 void FixedUpdate() 2 { 3 totalTime += Time.deltaTime; 4 temMinute = CalcTime(Convert.ToDouble(totalTime / 60f).ToString("0.00"), 0); 5 temSeconds = CalcTime(Convert.ToDouble(totalTime - Convert.ToDouble(temMinute) * 60f).ToString("0.00"), 0); 6 temMilli = CalcTime(Convert.ToDouble(totalTime - Convert.ToDouble(temMinute) * 60f).ToString("0.00"), 1); 7 }
好吧,真的一点不高深,纯属看思路
也没啥好说的,随便看看吧
我游戏功能要实现的功能还有一大堆,先闪了
写得不好勿喷
本文链接:http://www.cnblogs.com/shenggege/p/4251123.html