以下内容的前提是,大家知道,如何在编辑器里面写jass, 方法就是任意新建一个T, 转换T为J文本,删除里面所有文本, 干干净净的开始我们自己的实用Jass旅程
大家请注意,我个人作为长期接触WE(World Editor.exe)的菜鸟,并不觉得不会Jass有什么困难,但是我希望大家了解一些Jass的最实用的东西,提高作图速度,加强作图效率,排除各种泄露,轻松作图. Jass是什么,是个巨人,我们只需要站在巨人的肩膀上,至于巨人长什么样子,构造是什么,我们无需了解,我会尽力让大家都能站到这个肩膀上,足矣
触发器:
触发器, 就是在地图编辑器里面, 有个触发编辑器. 图标是个字母a的样子, 点开之后, 你可以在里面新建文件夹, 每个文件夹内, 可以新建触发器.触发器, 在正常情况下, 可以书写事件, 条件和动作, 这样的触发器, 我们叫做Trigger, 简称T. 因为这是暴雪提供的可视化界面
触发器, 可以通过菜单栏的编辑- 转化为jass文本, 变成语言界面的编辑模式, 如果将一个空触发器转化成jass之后再删除内部全部文本, 这算做一个空的Jass触发器, 我们就可以写自己的代码了
T转J是不可逆的过程, 原因? 学会了Jass就可以理解了. 当然, 你可以通过撤销命令返回转化之前的T
变量:
变量, 分为全局变量和局部变量全局变量, 在任何触发器, 任何函数里面都可以使用的, 如果使用触发编辑器界面提供的变量定义, 这是全局变量, 真实名称 = udg_前缀 加上 变量的名称. 在T转J之后你会看到这个前缀.
还有一种定义方法是用globals和endglobals在jass里面定义, 这属于vjass的范畴, 下面会讲到.
局部变量, 只能在函数内部使用的变量, 在外部无法调用. 局部变量的命名规则比较简易, 不同函数内部的局部变量可以重名.
函数:
函数又叫function. 在T里面, 一个事件就是一个function的结构, 条件也是一个function, 动作也是.function的结构是
function NAME takes xxx returns xxx
然后用endfunction结束本段function. 具体会在下文中讲解.
变量类型, 数组
变量有不同的类型, 比如单位, 比如计时器, 比如整数, 实数. 学习jass的话, 我们就还需要了解这些类型的英文对应写法.数组, 是为了扩展同一个变量的, 比如我们定义了单位变量A, A一次只能指代一个单位, 但是如果定义了数组, A[j], j 的取值范围是0到8191, 也就是说一个单位数组A最多可以表示8192个单位
为什么要数组? 答案很简单, 一个是方便书写和调用, 一个是利于写循环. 比如
循环数 j = 0
当 j > 11 时 退出循环定义 A[j] = 创建给 玩家(j) 山丘之王 在坐标0, 0 面向角度默认
设置 j = j + 1
结束循环
上述写法是基于jass的写法翻译, 大家要习惯, 我们这么写就是分别给玩家1~12创建了山丘之王, 并且定义A[0] 就是玩家1控制的山丘之王, 直到A[11]是玩家12控制的山丘之王
BJ函数? CJ函数? Jass高亮
在Jass中, 比如YDWE编辑器, 内附了Tesh插件可以让Jass文本高亮, 主要高亮一些关键词, 对不同关键词上色, 这样极大的方便了我们Jass的可视性和书写的方便.
先介绍CJ, 这个CJ不是C语言的J, 而是我们能看到的Common.j函数, 里面都是比较原始的函数, 高亮时用淡紫色表示.
BJ, 暴雪基于CJ转化的Blizzard.j函数, 高亮时用红色显示. BJ函数基本上就是T里面的函数, 和CJ的区别是: 一般来说BJ和CJ引用的变量的顺序有调换, 另一方面, BJ函数大都是
CJ函数的再处理, 有些BJ函数其实也很好用, 我们没必要去一定要倾向于CJ而忽略某些方便易行的BJ函数.
函数的再理解
函数和变量一样, 不能重名. 函数返回值叫做 returns xxx, 一般xxx是一个变量类型, 比如 returnsinteger返回一个整数, 如果一个函数是有返回值类型的, 那么我们可以将此函数理解为类似于一个变量的类型. 返回整数类型的函数, 就不妨理解为一个整数变量, 只不过这是一个在函数内部还有一系列动作和复杂过程的东西, 归根结底, 它就可以看作一个整数变量使用. 比如:
已知有一个function RRR takes nothing returns integer.
设置 整数变量 AA = RRR()或者有一个 function RRR takes integer i returns integer.
设置 整数变量 AA = RRR(100)
这个函数的再理解, 我请大家看完下面的函数具体讲解之后再回来看看, 估计就有眉目了
巧用T转J
因为很多命令和函数我们记不得, 比如触发单位对应的是什么函数? GetTriggerUnit(), 怎么知道的呢, 答案很简单, 新建一个触发器, 写一个动作或者条件, 包含有触发单位的. 然后T转J, 去找找相应的转化之后的词语.英文拆分, 比如这个触发单位, Get表示获取, Trigger表示触发, Unit表示单位, ()是啥意思呢, 不妨猜以下, GetTriggerUnit实际上就是CJ里面的一个函数而已, 我们再调用这个函数, 大家不难发现这个原函数是
constant native GetTriggerUnittakesnothing returnsunit
因为这个函数takes nothing, 所以我们()内啥也不写, 因为这个函数返回值是单位类型, 所以我们可以视这个函数就是一个单位类型的变量. 因此,GetTriggerUnit()就是触发单位.
索引号的区别
刚才我们谈到数组, 大家可能奇怪, 为啥0 对应的是玩家1 呢, 这里我要澄清, 在T里面我们可能会用到一个函数叫做 玩家索引, 大家注意, T是为了方便作图用的, 也就是说这个玩家索引, 是一个BJ函数, 它的Jass内的原名是 GetConvertedPlayerId, 而CJ对应的函数是 GetPlayerId . 后者, 对于玩家1的序号是从0 开始的, 而前者, 是调用后者的函数得到的值再加上1, 也就是说, 玩家1在BJ的函数里面序号是1, 而本质的CJ函数序号是0, 我们来看看BJ函数的真面目
function GetConvertedPlayerId takes player whichPlayerreturnsinteger
return
endfunction
大家如果习惯用CJ的0开始计数, 那么就请保持CJ的习惯, 不然, 就用BJ吧.... 这个完全和个人习惯有关, 不需要考虑太多到底哪个效率高, 实在不行, 你自己调用CJ再写+1也无妨
类似大家要注意的是物品栏序号, 也是从0开始的, 到5结束, 对应单位物品栏1~6号物品.类似的还截取字符串, 这里CJ是SubString而BJ是SubStringBJ
原文: http://bbs.uuu9.com/thread-3999486-1-1.html