偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 2078|回复: 0

jass基础教程之常见问题篇

[复制链接]
邪恶叔 title=
发表于 2010-11-23 14:12:04
  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!
快速回复 返回顶部 返回列表