一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会d出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这会让你享受到一天都不止的漫长调试“乐趣”中)。晶振频率不同自然在相同参数的情况下得出延时时间不同。另外如果你确实需要得到一个比较精准的延时时间,建议你采用定时/计数器,至于怎么用这玩意儿,很简单!不到十分钟就能学会的事儿!这里就不提供教程了,用你调试的时间去学它会让你更有成就感。写了那么多,希望能帮助点什么
一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会d出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这会让你享受到一天都不止的漫长调试“乐趣”中)。晶振频率不同自然在相同参数的情况下得出延时时间不同。另外如果你确实需要得到一个比较精准的延时时间,建议你采用定时/计数器,至于怎么用这玩意儿,很简单!不到十分钟就能学会的事儿!这里就不提供教程了,用你调试的时间去学它会让你更有成就感。写了那么多,希望能帮助点什么
一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会d出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这会让你享受到一天都不止的漫长调试“乐趣”中)。晶振频率不同自然在相同参数的情况下得出延时时间不同。另外如果你确实需要得到一个比较精准的延时时间,建议你采用定时/计数器,至于怎么用这玩意儿,很简单!不到十分钟就能学会的事儿!这里就不提供教程了,用你调试的时间去学它会让你更有成就感。写了那么多,希望能帮助点什么网络延迟正常范围是 1-100 (毫秒)
30以内是极速。30以上70以下是正常,70以上有点慢但不影响
100以上就会影响游戏了
当然,实际游戏中会存在每个玩家延迟不同的情况,所以游戏主机会对这种情况加以平衡
所以只要在正常范围内,延迟大小可以无视的
========================
延迟补偿是游戏服务器端执行的一种策略,处理用户命令回退到客户端发送命令的准确时间(延迟导致),根据客户端的具体情况进行修正,以牺牲游戏在伤害判定方面的真实感来弥补攻击行为等方面真实感,本质上是一种折中选择。
主要注意,延迟补偿不是发生在客户端。
关于延迟补偿的一个例子:
在FPS游戏中,玩家A在105秒时向目标对象玩家B射击并且击中,射击信息被打包发送(网络延迟100毫秒)(1000毫秒=1秒,因此100毫秒=01秒),服务器于106秒收到,此时玩家B可能已跑到另外一个位置。
若服务器仅仅基于接收时刻(106秒)进行判断,那么玩家B没有受到伤害,或许可能会击中玩家B后面紧跟的玩家C(100ms后玩家C完全由可能已处于玩家A的射击目标位置)
为了弥补由于延迟造成的问题,服务器端需要引入“延迟补偿”策略用于修正因延迟造成错乱假象
服务器计算执行设计命令时间,然后找出当前世界105秒时刻玩家信息,根据射击算法模拟得出是否命中判断,以达到尽可能精确
若游戏延迟补偿被禁用,那么就会有许多玩家抱怨自己明明打中了对方却没有造成任何伤害。。
有所得,有所失:但这对低延时玩家貌似有些不公平,移动速度快,可能已经跑到角落里并且已蹲在一个箱子后面隐藏起来时被对手击中的错觉(子d无视掩体,玩家隔着墙被射击),确实有些不乐意。
延迟补偿,网络高延迟的玩家有利,低延迟的玩家优势可能会被降低(低延迟玩家利益受损),但对维护游戏世界的平衡还是有利的。程序中出现的delay(n),表示该函数内的while(i--);循环语句的循环体执行n次。
至于执行n次究竟是多少时间,那就要看:您用的是什么CPU、晶振的频率是多少、您的C语言用的是哪个版本,其中的优化方式是什么、……。
这些因素,都会影响一个语句的执行时间,当然总时间也就受影响了。
不过有一点可以肯定:同一个环境下,n越大,延迟时间越长,大致呈正比。
不过我这里说“大致呈正比”,是假定系统中不存在可以打断它的“中断服务程序”。如果有中断来不定期打断它,那时间就很不确定了。
因为n的类型是unsigned int ,在常见的环境下最大可取65535。若n取65535,现在常见的单片机或计算机的条件下,这个时间少则若干毫秒,多则也就几秒。如果单片机晶振为6M,机器周期即为2us=12/fosc
汇编语句对时间的把握精确于C语言,所以参考不同指令的长度,
就可以算出你的延迟时间。
单片机的延时程序:
MOV
R7,#200
LOOP1:MOV
R6,#125
LOOP2:DJNZ
R6,LOOP2
DJNZ
R7,LOOP1
RET
第一句为单周期指令,耗时2us
第二句执行了200次,耗时2200us
第三句为双周期指令,执行了125200次,耗时22125200us
第四句同第三句,耗时22200us
第五句双指令周期
总够耗时2+2200+22125200+22200+22
约为100ms
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)