1)什么是全局变量和局部变量, 怎样声明和使用变量? 首先要了解, 从作用范围来区分, 变量有全局变量和局部变量. 全局变量作用于Jass程序的全部分, 即是如果全局变量abc在某个函数中改变了值, 这个值也将影响其他引用了abc变量的函数. 全局变量声明格式: globals 变量类型 变量名称 = 初始值 //有初始化的全局变量 变量类型 变量名称 //无初始化的全局变量 变量类型 array 变量名称 //数组全局变量, 不能再次初始化赋值 ... endglobals 局部变量只作用于函数内部, 即是如果在函数内部定义了局部变量abc, abc的值只影响该函数内部, 不影响全局变量abc的值. 局部变量声明格式: local 变量类型 变量名称 = 初始值 //有初始化的局部变量 local 变量类型 变量名称 //无初始化的局部变量 local 变量类型 array 变量名称 //数组局部变量, 不能再次初始化赋值 注意: 1) 不论是全局变量还是局部变量, 必须在程序开始部分首先声明. 即是全局变量声明总是在程序文件的最前端, 而局部变量声明总是在函数的最前面. 2) 在Trigger Editor用变量管理器(Ctrl + B)中定义的变量都是全局变量 3) 在Trigger Editor的循环GUI语句 For Loop (Integer A)和For Loop (Integer B)中的(Integer A)(Integer B)都是全局变量 实例: globals integer abc = 5188 endglobals ....... function myfunc1 takes nothing returns nothing local integer abc set abc = 1233 endfunction function myfunc1 takes nothing returns nothing local integer myint set myint = abc set abc = 0 endfunction 如果按顺序调用函数myfunc1 和 myfunc1, 那么在函数myfunc2中的myint的值是多少呢, abc最终值又是多少? 答案是: int = 5188, abc 最终值为 0 2)怎样在Trigger Editor(GUI)中使用局部变量? (有关在Trigger Editor(GUI)中使用局部变量详细方法请参看我的签名中的链接 - 3c的内存泄漏) GUI中不能直接引用局部变量,但是我们可以使用全局变量作为中介 首先声明定义变量类型。声明定义变量类型的语句只能放在TIGGER的开头,不然会出现编译错误 声明定义变量类型: 要用:Custom Script - Action 语法: Custom Script: local <变量类型> <变量名> 变量类型请参看WORLD EDITOR和JASS变量类型对应表 例如: --单位变量 Custom Script: local unit u --单位组变量 Custom Script: local group g 然后将它们赋值给临时全局变量就可以在GUI里调用该值了,注意全局变量要加前缀"udg_" Custom Script: set udg_TempUnit=u 局部变量的使用: 在变量表(Control + B)中先定义好同类型临时变量(不要加前缀udg_)的变量,该变量可以在多个触发里重复利用 (在变量表中定义此变量是为了方便TIGGER EDITOR引用该变量。) 以下例子实现了在单位死亡的位置显示5秒的死亡信息(漂浮文字) (象这种例子, 如果不使用用局部变量, 将无法准确销毁临时漂浮文字(-Destroy (diesmessage)). 因为在等待5秒后(-Wait 5.00 seconds), 最近创建的漂浮文字(last created floating text)可能已经不是原来的那个了 ) 例子: Events: A unit dies Conditions: Actions: -Custom Script: local texttag diesmessage -Custom Script: set udg_TempTextTag = diesmessage //注意要添加"udg_"前缀 -Floating Text - Create floating text at ((position of (Triggering Unit)) with the message ((A+(name of (Triggering Unit))) + "dies") with size 20 , red 100, green 100, blue 0, alpha 100. -Set TempTextTag= (last created floating text) -Wait 5.00 seconds -Custom Script: set udg_TempTextTag = diesmessage -Destroy (TempTextTag) 注意:不要利用同名覆盖的方法在GUI中使用局部变量!(即以udg_开头的局部变量与已定义全局变量名字相同) 该方法在触发内该类同名变量数量>=2时会出现严重Bug!
|