|
发表于 2008-1-27 15:39:25
|
显示全部楼层
引用第11楼hunluan89于2008-01-27 15:31发表的 :
你们争论那个问题
[codes=jass]call CreateNUnitsAtLoc(1,'e000',SpellPlayer,SpellPoint,0)
local unit a=GetLastCreatedUnit()[/codes]
这样写是句法错误 上面是弄个组出来 下面是一个是要求单位 连着放起就是错的 我把上面一句改成返回单位的就对了
先创造组在获取GetLastCreatedUnit()这样写没有任何语法错误~~
要我说几遍呢?~~
你的错误在于local声明没有写在最前~~而不是用了GetLastCreatedUnit()所导致的~~
不管前文如何~~GetLastCreatedUnit()返回的类型依然是unit~~
该函数的内容只有一句~~
[jass]
function GetLastCreatedUnit takes nothing returns unit
return bj_lastCreatedUnit
endfunction
[/jass]
也就是获得bj_lastCreatedUnit这个unit类型变量的值
而CreateNUnitsAtLoc()本身不会对这个变量赋值~~
因为它的内容是
[jass]
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
call GroupClear(bj_lastCreatedGroup)
loop
set count = count - 1
exitwhen count < 0
call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
endloop
return bj_lastCreatedGroup
endfunction
[/jass]
它创造出来的单位组是赋给bj_lastCreatedGroup的而不是bj_lastCreatedUnit~~
而一次创造多个单位是靠循环调用CreateUnitAtLocSaveLast()这个函数实现的~~而CreateUnitAtLocSaveLast()才会给bj_lastCreatedUnit赋值~~
它是每创造一个单位赋值一次~~因此总是只会将最后创建的那个赋给bj_lastCreatedUnit~~
[jass]
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
if (unitid == 'ugol') then
set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
else
set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
endif
return bj_lastCreatedUnit
endfunction
[/jass]
这根本没有任何争论的余地~~GetLastCreatedUnit()永远不可能返回一个组~~而且你就算把上一句改为CreateUnitAtLocSaveLast()也是无意义的~~我包管你还是保存不了~~因为问题本来就出在local上而不是GetLastCreatedUnit()返回的类型~~ |
|