[修正] WE全局变量教程~~
魔兽地图编辑器吧
全部回复
仅看楼主
吧务
level 15
najizhimo 楼主
卐友情支持。
由于是新手教程,所以不会非常深入,更深入的教程请期待接下来的若干弹~
这篇文章只介绍Trigger里的全局变量哦~
文章末尾有各种传送门
2011年03月04日 11点03分 1
吧务
level 15
najizhimo 楼主
变量的概念:
变量之所以称为变量,是因为它没有固定的值,是一种可以改变的数值或数据。变量与常量互为反义词。但是在一个固定的时刻,变量的值是明确的。简单地来说,在WE中,可以把变量理解成一个有类型的存储器,他可以存储魔兽游戏中的几乎所有有用的数据。
变量的分类:
按使用域来进行区分,分为全局变量和局部变量两种。
两种变量在WE中都可以扩展成一维数组,这里不介绍,看1楼链接。在JassHelper下可以编辑二维数组。
全局变量:
1、记录数据。
2、在触发间进行传递。
3、所有触发都可以调用这个量。
4、需要预先在WE里创建,使用后不必排泄变量本身,但是也可以按照需要清空。
局部变量:
1、记录数据。
2、只在定义的所在触发下生效并调用(其实是所在函数,但是这里不深入),不能在触发间传递(其实是不能再函数间传递,除非传参,不过这是J的范畴)。
3、在定义的时候才创建,函数结束后失效,而且对于Handle类必须排泄,否则会堆积无用的数据影响运行速度。
4、与全局变量名称相同时,全局变量失效,局部变量生效。(学习1楼局部变量的同学相信从这条可以明白在T中使用局部变量的原理了)
2011年03月04日 11点03分 2
吧务
level 15
najizhimo 楼主
下面,说下WE中T的变量系统。
在深入理解WE变量之前,要清楚WE中的数据类型。
WE中有近百种的数据类型,单位、技能、物品、计时器等等。
但是大致可以归类为以下6种:
1、整数:32位有符号整数型(4byte)取值范围:[-2147483648, 2147483647] (2^31+符号位)
2、实数:实数型(单精度浮点型,4byte)取值范围:[1.5*10^(-45), 3.4*10^38]
3、布尔:布尔型(1byte),就是真假型变量,用来记录true(真)或 false(假)。
4、字符串:字符串型(不定长)用来记录字符。
5、句柄类型(这个类型涵盖很多):数据指针型是jass语法的一个基础类型,由它可以派生出其他数据类型的指针。用来指向内存中的一个数据地址。
6、code(在T编辑中基本不会用到):函数指针型 用于指向内存中的函数地址。
如何建立变量?
触发编辑器中的变量编辑窗体:
新建变量的过程:
如图上,变量的建立需选定指定的且匹配的类型,中文的翻译就是字面的意思。
变量的名称不能含有中文,必须是英文、数字、下划线来组成。
简单全局变量的建立:
图片中的“数组”可以参考教程末尾的数组教程。不动也可以。
“初始值”就是字面的意思,一般来说不必动它。
设置完名称和类型就可以点确认了。
得到的结果:
全局变量就是在整个游戏中都有效到的变量。
按照这种方法我们可以分别建立如下变量:

2011年03月04日 11点03分 3
怎么定义 全局的 handle 类型?
2017年03月01日 08点03分
@哎哪娜扎🍀 上面的单位就是handle类型,你问这个问题是没搞懂什么是handle,整数实数布尔外都是handle的子类型
2017年03月01日 09点03分
@najizhimo 我是想问 默认 编辑器 是不是 不能直接定义一个 handle udg_h 在global 域中,必须自己改 jass?
2017年03月01日 12点03分
@哎哪娜扎🍀 jass也不能这么做,你完全误解handle的意义,JASS地带精品区的基础看起
2017年03月01日 12点03分
吧务
level 15
najizhimo 楼主
全局变量的使用:
上图为整数的赋值操作。
我们可以建立一个简单的触发1
不难发现,变量可以代替一个同种类型的具体值。
大家知道触发编辑器中的动作选项,其实就是利用触发器执行一条一条的动作,从而实现一些事件的相关功能。大多数动作中都有相关的、可以更改的参数。
这些参数都可以用变量代替。
国王之冠固然是很神级的物品,因此为了惩罚贪得无厌的玩家,我们创建多一个触发2:
。。。我们来理清思绪:
1、Bool的初始值为“False”,Uint的初始值为“没有单位”
2、第一次按下Esc键,由于Bool的初始值匹配了触发1的条件,因此触发1生效,而触发2不生效。
3、触发1生效的后果是,新创建的圣骑士被赋值给Unit,然后Bool的值被设置了True。
4、再次按下Esc,Bool的值通过,杀死了被变量Unit“捉住”的圣骑士,然后又把Bool设置为false。
5、如此一来,这2个触发就可以互相循环了。
2011年03月04日 11点03分 4
吧务
level 15
najizhimo 楼主
虽然以上2个触发没什么意义~但通过这个事例,大家能了解全局变量的使用了吧~
值得注意的是:全局变量在有等待事件的触发中使用时一定要小心。
比如,如果将这两个触发器改成

那么在第一次按下Esc键10秒内,若再按Esc键,则会发现10秒后自爆而死的人是后创建的那个圣骑士。因为第二次触发时创建的圣骑士,把第一次触发创建的圣骑士代替了。所以执行单位Unit自爆时,只会第二个圣骑士自爆……
概括的说就是所有的触发器动作都能使用这个变量时,尽量要让变量有序的使用,尽量避免等待事件而导致的变量操作不准确。
2011年03月04日 11点03分 5
没看懂,请问一下。这两个触发都没条件,而事件是一样的,不是应该一起都运行了么?
2013年09月11日 02点09分
回复 帅帅的宏 :boll在设置变量时就是假的,所以触发1成立!
2014年08月23日 13点08分
不好意思挖坟了,问下为什么不能是“创建 Itemtype 给(最后创建的单位)”,而是“创建 Itemtype 给 unit”
2023年12月29日 07点12分
@玫瑰夜曲侧栏 这2个完全相等,无所谓你用哪个。unit变量是给后面的等待触发自爆用
2023年12月29日 10点12分
吧务
level 15
najizhimo 楼主
总结变量的功能,其实就是:
1、记录需要的数据
2、在其他地方调用这个变量
就那么简单哦~
某传送门
学前班知识T,J,VJ三者关系:https://tieba.baidu.com/f?kz=901638785
局部变量:https://tieba.baidu.com/f?kz=1016834776
数组变量:https://tieba.baidu.com/f?kz=1016815484
更多相关运用:https://tieba.baidu.com/f/good?kw=%C4%A7%CA%DE%B5%D8%CD%BC%B1%E0%BC%AD%C6%F7&cid=7
2011年03月04日 11点03分 6
大佬 学前班知识T,J,VJ三者关系 这个传送贴没了,能补一下吗?[托腮]
2023年11月02日 01点11分
@并非嘲讽 有啊,我都能点进去
2023年11月02日 16点11分
其他三个都能看,就学前班知识https://tieba.baidu.com/f?kz=901638785,这个点进去显示帖子不存在或被删除[小乖]
2023年11月03日 05点11分
@并非嘲讽 那看来是17年官方贴吧大清理时隐藏了部分贴子只能给老人看,我复制粘贴放在这贴的末尾了
2023年11月03日 16点11分
吧务
level 15
najizhimo 楼主
[揉脸]下一篇
2011年03月04日 11点03分 7
level 9
[揉脸]
2011年03月04日 11点03分 8
level 11
[鲁拉]
2011年03月04日 11点03分 9
吧务
level 15
najizhimo 楼主
如此如此
2011年03月23日 16点03分 10
level 6
如此
2011年03月23日 16点03分 11
level 13

2011年03月23日 21点03分 12
level 13
第一次看这东西
2011年04月13日 07点04分 13
level 5
看见新手二字我就果断进来了 [Love]
2011年04月17日 10点04分 14
level 5
应该是果断MARK [瘫坐]
2011年04月17日 10点04分 15
吧务
level 15
najizhimo 楼主
不客气尽管粉
2011年05月14日 08点05分 18
level 10
新手必须顶下
2011年05月27日 05点05分 19
level 8
[顶]
2011年05月27日 05点05分 20
level 6
不懂T_T
2011年06月01日 02点06分 21
1 2 3 尾页