|
发表于 2008-5-10 14:44:50
|
显示全部楼层
我不同意lz的说法,等待虽然不准确,但同样是经严格的同步实行的。不同机器联机时同时执行等待命令,实际等待或许并非预设值,但是同一值。
首先,这里的掉线是指不同步。假设等待是不能同步的,比如预设的等待0.2秒--创造一个单位,那么实际两台机器执行起来会不会一个是等待0.1秒--创造单位,另一个因为速度慢等待了0.3秒才创造单位呢。
以下是一些未经验证的试验设想:
1.在用精度高的timer,而计时器的到期时间不同,预设玩家a 0.1秒,玩家b 0.2秒,到期的计时器什么也不做或是一个空函数
2.timer到期接上会改变全局的操作---比如创造一个单位
[codes=jass]
function nothing takes nothing returns nothing
endfunction
function dosth takes nothing returns nothing
call CreatSth
endfunction
function deplayer takes player p1,player p2 returns nothing
local timer t=CreateTimer()
local real ext=0
if GetLocalPlayer()==p1 then
set ext=0.1
elseif GetLocalPlayer()==p2 then
set ext=0.2
endif
call TimerStart(t,ext,false,function nothing or null?)
endfunction
function deplayer2 takes player p1,player p2 returns nothing
local timer t=CreateTimer()
local real ext=0
if GetLocalPlayer()==p1 then
set ext=0.1
elseif GetLocalPlayer()==p2 then
set ext=0.2
endif
call TimerStart(t,ext,false,function dosth)
endfunction
[/codes]
更直接的可以看看如果
[codes=jass]
function debugTriggerSleepTime takes nothing returs nothing
local timer t =CreateTimer()
call TimerStart(t,GetRandomReal(1,2),false,null)
call TriggerSleepAction(GetRandomReal(0,1))
call PauseTimer(t)
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,10,R2S(TimerGetElapsed(t)))
endfunction
[/codes]
以上,如果在两边机器能显示不同的等待时间,那么就可以支持lz的观点了
补充:
等待与游戏时间等待
由于等待经过的时间可以认为不受游戏本身影响(比如游戏速度),像是暂停游戏过一段时间之后恢复游戏,能用在这里的就只有等待(了吧)。
两个测试的目的, 我将lz提出的等待不同步产生掉线的观点分解为两步
1.等待对不同机器联机执行上会有差异,同一个等待命令在两者上实际时间可能不同
2.在实际执行时刻不同的情况下将会有两种结果:掉线,不掉线。。。
掉不掉线由差异是否过大决定
偶的看法
1.同一等待命令执行结果相同,预设0.2秒的话,也许实际执行是0.175,也许是0.25,也许是1.5,但不同机器将得出同步的结果。
2.对于涉及全局数据内容的,哪怕存在的执行差异时间再小,也会掉线(或者有一个允许偏差存在?) |
|