|
首先,请你先看看下边的一段代码,这是一段给玩家创建选取英雄的猪羊的代码.
你有没有发现什么地方出现错误的.除了里边的一些udg_开头是全局变量没定义出来,我想你不会发现错误的.
[codes=jass]function AddForce takes nothing returns nothing
local integer i
local location loc
call DisplayTextToForce( GetPlayersAll(), "配置玩家" )
loop
exitwhen i > 4
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
call ForceAddPlayer( udg_LightForce, Player(i) )
if udg_IsRandom then
call DisplayTextToForce( GetPlayersAll(), "光明力量1" )
set loc=udg_CommonUsePoint[43]
call CreateNUnitsAtLoc( 1, 'nalb', Player(i), loc, ( bj_UNIT_FACING + ( 72.00 * I2R(i) ) ) )
else
call DisplayTextToForce( GetPlayersAll(), "光明力量2" )
set loc = PolarProjectionBJ(udg_CommonUsePoint[41], 100.00, ( 90.00 + ( 72.00 * I2R(i) ) ))
call CreateNUnitsAtLoc( 1, 'nalb', Player(i), loc, ( bj_UNIT_FACING + ( 72.00 * I2R(i) ) ) )
endif
endif
set i = i + 1
endloop
set i=6
loop
exitwhen i > 10
if ( GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING ) then
call ForceAddPlayer( udg_LightForce, Player(i) )
if udg_IsRandom then
call DisplayTextToForce( GetPlayersAll(), "黑暗力量1" )
set loc=udg_CommonUsePoint[44]
call CreateNUnitsAtLoc( 1, 'nvul', Player(i), loc, ( bj_UNIT_FACING + ( 72.00 * I2R(i-6) ) ) )
else
call DisplayTextToForce( GetPlayersAll(), "黑暗力量2" )
set loc = PolarProjectionBJ(udg_CommonUsePoint[42], 100.00, ( 90.00 + ( 72.00 * I2R(i-6) ) ))
call CreateNUnitsAtLoc( 1, 'nvul', Player(i), loc, ( bj_UNIT_FACING + ( 72.00 * I2R(i-6) ) ) )
endif
endif
set i = i + 1
endloop
endfunction[/codes]
可是,这一段代码在我的新作品中运行时,却总是不能如愿的创建单位.
只是显示了,"配置玩家".之后这函数没什么显示..
而预期的目的是给在线玩家创建单位.
后来,我无意中给i初始值0,结果这个函数能够很好的运行..
根据我的初步分析,War3创建变量时,如果系统分配给变量的空间原先有内容,那么该变量的初始值不为空.因此这些变量在使用时可能导致不可预料的结果.
所以,我建议大家在使用变量,尤其在使用局部量时,不要为了偷懒而省下初始化数据的动作.因为没初始化导致BUG的排查时间决对比你写初始化的时间长许多倍.
布尔值设false,整数设0,实数设0.0,句柄之类一律设null
要使用变量时,再根据需要给变量赋值..
对于没初始化的问题,我有空会研究一下吧.
希望已经有研究的朋友们一起来讨论~~ |
|