|
为了多线程操作而创造的触发一般都会需要创造它的函数给他一些数据 如果用全局变量来传递这个值 可能会在频繁的使用时出现问题 其实可以用一个单位来传递这些数据 如果是为了一个aloc单位( 偶喜欢那么叫..这个素蝗虫技能的代码也就是)而创建的触发 那么这是最好的情况 否则可以额外创建一个aloc单位来当作事件的引发者
[jass]
function BasicFunction takes ......
....
set aloc = CreateUnitAtLocSavelast( pOwn, 'xxxx', lBeg, 0) //pOwn为需要传递的一个玩家变量
//lBeg为为需要传递的一个点变量
call SetUnitUserData( aloc, iA + iB * 10 + iC * ....)//iA~In为需要传递的N个整数变量
call SetUnitLife( aloc,rA) //rA为需要传递的一个实数 同样单位的魔法值,移动速度,转向速度,动作速度等等也可以用来传递变量!
call SetUnitRallyUnit( aloc, uTar) //uTar为需要传递的一个单位冰凉 当然这个也可以用来储存点或可破坏物体
set trgBeCreate = CreateTrigger()
call TriggerRegisterUnitEvent( trgBeCreate, aloc, EVENT_UNIT_ISSUED_POINT_ORDER) //aloc为创造的一个蝗虫单位
call IssuePointOrderLocBJ( aloc, "move", lTar) //lTar为需要传递的另一个点变量:P
call TriggerAddAction( trgBeCreate, function DoFunction)
....
endfunction
[/jass]
这样一来就有N多数据可以不用全局变量来传递了 并且一个单位的生命或魔法甚至可以像自定值那样同时存储N个数据 然后再利用切割字符串来分离 或者可以用N维的数组的求元素地址法来存储
如果有一些使用率较低的变量种类难以传递的话 那么下表可能会有一些帮助
player -可以用GetOwningPlayer(unit)或Player(integer)
ability -可以把事件改为释放技能 那么就可以用GetSpellAbilityId()来得到一个技能变量 或用一个全局变量来储存所有技能 然后传递一个整形数作为编号
location - 可以用PolarPirjectionBJ(location,real,real)来用一个旧的点得到新的点也可以用坐标来得到点
destructable -可以用GetSpellTargetDestructable()或GetOrdertargetDestructable()来得到 否则就需要使用较麻烦的办法 先在BasicFunction那在一个点或坐标创造需要传递的可破坏物 然后在使用搜索以得到那个可破坏物 同样其他一些在XX位置的变量 如纹理也可以用此方法得到
type -由于类型其实是Integer变量 因此可以用Integer来传递
string -或许用游戏缓存来传递是最好的办法:P 同样其他的一些变量也可用此法
另外就是数据的类型转换 比如int和real,string等能互相转 而location通过一些手段也能和real互相转型 player,unit,des等也可转为integer |
评分
-
查看全部评分
|