|
发表于 2009-12-29 06:30:39
|
显示全部楼层
[jass] local player Owner = GetTriggerPlayer()
local group G
if Owner = GetLocalPlayer() then
set G = CreateGroup()
call GroupEnumUnitsSelected(G,Owner,null)
loop
//判断G中的单位类型,不更改
endloop
call DestroyGroup(G)
endif[/jass]
这样是一定会不同步的只要是agent派生出来的子类就要同步(估计是……)
而group就是agent的子类。
if p == GetLocalPlayer() then
的意思是说:
每台电脑上都运行这样的一串代码,玩家1电脑的GetLocalPlayer返回的是玩家1,玩家2电脑的GetLocalPlayer返回的是玩家2……
于是当你限定GetLocalPlayer() == Player(0)的时候(打个比方),那么只有玩家1的电脑会执行if内的代码,其他玩家条件判定不过,if内的代码就不执行。
而这样造成不同步的原因举个例子,就是你在if内的代码中有对单位发布移动命令,这样,除了限定的那个玩家以外,其他的玩家的那个单位都不动。而在限定的玩家电脑上,那个单位却移动了,于是后果可想而知…………
你的jass代码的意思是说,当GetTriggerPlayer() == GetLocalPlayer()的时候,做某些必须要同步的动作。
于是就不同步了。
如果你的代码中的注释是正确的。
那么改成这样应该就可以了:
[jass] local player Owner = GetTriggerPlayer()
local group G = CreateGroup()
call GroupEnumUnitsSelected(G,Owner,null)
if Owner = GetLocalPlayer() then
loop
//判断G中的单位类型,不更改
endloop
endif
call DestroyGroup(G)
[/jass] |
|