Jass基础教程
JASS基础教程
■作者:天零萃梦
■转载请注明本⽂出处: www.doczj/doc/90cad6fd770bf78a652954f1.html
■本⽂假定您拥有WE触发器最基础的知识以及熟悉Windows的基本操作
■⽂中所⽤UI版本: 夜天新⼿助推器(1.24UI)
//===================================================================== // Blizzard.j ( define Jass2 functions that need to be in every map script )
//===================================================================== 本⽂尽量运⽤WE中实际编写Jass 代码的例⼦来说明Jass的基本语法和⽤法Jass : Just Another Script System
什么是Jass?
JASS(正确地说是JASS 2)是魔兽3的程序语⾔,⽤于控制游戏和地图的进⾏,也是魔兽游戏和地图的基
础。地图编辑器中摆放的单位(Unit),区域(Region) ,触发(Trigger)……等,最终都会被翻译成JASS语⾔存在地图⽂件⾥,在游戏时被使⽤。
为什么要学习Jass?
某些功能仅仅依靠GUI(GUI:⽤户图形界⾯,既T的编辑环境)是⽆法完成的,必须⽤Jass来实现. 例如只对某玩家播放⾳效, 或者让某些华丽的技能⽀持多⼈释放等.
Jass可以定义局部变量以及⾃定义函数,增加设计的⽅便性. 熟练使⽤Jass可以很好的提⾼效率, 往往Jass⼏个输⼊字符就能完成的事情,GUI需要点选动作⽆数次才能做完.
GUI虽然可以完成⼏乎所有的功能,但是对于内存释放能⼒太差,转化成的Jass代码会执⾏许多额外的动作. ⽤Jass可以写出⽐GUI效率更⾼的代码,可以更灵活和更有效率地控制地图运⾏Jass 的基本使⽤⽅法
在地图制作时,Jass 的基本使⽤⽅法有3种
1.⾃定义脚本区编辑Jass (位置在触发编辑器左侧,触发器树的最顶端,左键点击地图名字即可
进⼊)
2.触发器转换为代码后编辑Jass (选定触发器后,选择菜单->编辑->转化为⾃定义⽂本,确定后
可将触发器转换为Jass代码)
3.在触发器中直接编辑Jass (使⽤动作->⾃定义代码动作来输⼊Jass)
⼀变量篇
变量是指在运⾏过程中随时可以发⽣变化的量,与其相对的是常量,但是在地图中不允许⾃定义常量,所以我们这⾥只说变量.
变量是数据的临时存放场所.在代码中可以只使⽤⼀个变量,也可以使⽤多个变量,变量中可以存放⽂字,数值,单位以及玩家等.由于变量让你能够把程序中准备使⽤的每⼀段数据都赋给⼀个简短,易于记忆的名字,因此它们⼗分有⽤.
变量分为全局变量和局部变量,全局变量是指在任何地⽅(任意触发器,任意函数中)都可以使⽤的变量,例如我们在触发器中创建的变量. ⽽局部变量,则是仅仅在触发器(或函数)当前运⾏时才存在的变量. 创建全局变量只能在变量编辑器中设置.
变量的创建和使⽤⽅法
1. 变量的命名规则
要使⽤变量,必须给变量取⼀个名字,就好像每个⼈都有⾃⼰的名字⼀样.
在JASS中,变量的命名必须遵循⼀下规则
1.变量名必须以字母开头,名字中间只能以字母,下划线”_”或数字组成,最后⼀个字符只
可使⽤字母或数字
2.在作⽤范围内不可使⽤相同名字的变量
3.变量名不能与任何函数名字相同
4.变量名不能是Jass中保留的关键字(关键字详见附录2)
例如strName1 intMax_Length intLesson strNo3等是合法的变量名,⽽A&B right_
3M _Number是⾮法的变量名
需要注意的是变量名是区分⼤⼩写的, 也就是说,Jass不会认为“a”和“A”是同⼀种东西.
定义和使⽤变量时,通常要把变量名定义为容易使⽤阅读和能够描述所含数据⽤处的名称,⽽不要使⽤⼀些难懂的缩写如A或B2等.这样会增加理解的难度.
例如, 要记录的数值是⼀个单位的⽣命值, 可以写为unitLife或者danWeiShengMingZhi,这样仅仅通过变量名就能知道我们记录的是什么,增加阅读难度的话如果出现了BUG, 需要排
错时是很困难的.
2.变量的声明
在变量使⽤前,必须在代码中进⾏声明,即创建该变量.
在GUI中,我们可以使⽤变量编辑器来声明新变量
字符串常量存放在哪个区域在这⾥声明的变量,是全局变量, 这也是唯⼀声明全局变量的⽅法(在仅使⽤WE的前提下).
所以我们这⾥暂时不讲全局变量的声明, 只⽤知道声明全局变量就在变量编辑器中创建就可以了
注:为了区分全局变量和局部变量的名字,GUI⾃动在所有变量编辑器设置的全局变量名的前⾯都加了udg_前缀, 因此图中的变量名实际为udg_unitLife
局部变量的声明格式为local <;变量类型> <;变量名>
变量类型是⽤来区分变量储存的数据类型,⽐如⽤于储存单位,就要使⽤单位unit
注:Jass中变量类型与WE中变量类型对照表见附录1
例:
local unit trigUnit
这样就声明了⼀个类型为单位的变量, 变量名为trigUnit
另外变量的声明要求在所有其他动作的前⾯.例如:
// 下⽂中<;动作> 为除了声明变量之外的任意动作⽐如”等待2秒”设置变量等..
local unit trigUnit
local unit dmgUnit
<;动作> //正确局部变量声明在所有动作之前
⽽下⾯的代码是不正确的.
local unit trigUnit
local unit dmgUnit
<;动作>
local unit targetUnit//错误局部变量声明在动作之后
每⼀条语句必须各占⼀⾏,例如下⾯的代码是错误的
local unit trigUnit local unit dmgUnit //错误每条语句必须各占⼀⾏
变量在声明时, 允许对其赋予初始值,格式为local <;变量类型> <;变量名> = <;表达式>
其中,表达式是统称. 表达式执⾏的结果与变量类型要相同
例如声明⼀个变量trigUnit为触发单位
local unit trigUnit = GetTriggerUnit()
例如声明⼀个变量playerId为触发玩家索引号, 另⼀个变量I为174 (整数: integer) local integer playerId = GetConvertedPlayerId(GetTriggerPlayer())
local integer I = 174
3. 变量的使⽤
声明完变量后,接下来就是如何使⽤变量的问题了.
对于任意变量通⽤的赋值操作符是“=”
它⽤于将后⾯的表达式计算后把结果赋予变量.
表达式得到的结果要求与变量类型相同
另外Jass要求,除初始化之外, 对变量进⾏赋值时必须使⽤set关键字
格式为set <;变量名> = <;表达式>
例如:
local unit trigUnit
set trigUnit = GetTriggerUnit()
对于整数,实数来说,可以使⽤普通的计算符号来进⾏计算操作.
其中+ - * / 分别对应着加减乘除(另外–还表⽰负号)
例如
local integer a = 1
set a = a + 1 // 将a + 1 计算的结果赋予a ,效果为a ⾃⾝增加1
对于字符串, 可以使⽤“+“来连接两个字符串
local string s = “hello” + “ I am a chimp”
请看下图的例⼦
此触发的执⾏结果是,在屏幕上显⽰出 3
4.变量操作举例:变量的值互换
local integer a = 3 // a的初始值为3
local integer b = 4// b的初始值为4
local integer c // 临时变量c
set c = a // 将a的值存储到c中
set a = b // 将b的值赋予a
set b = c // 将c中储存的值(原a的值)赋予b
如果⽤下⾯的代码的话就错了,因为在set a = b时a的值已经变为b的local integer a = 3
local integer b = 4
set a = b //a的值已经变为b
set b = a
注: 声明的局部变量如果类型不是整数,实数,字符串,布尔值,Code,(并且已经为其赋值) 那么使⽤完毕后要设置其为空值null 以释
放12字节的内存, 例如local unit u = GetTriggerUnit() 使⽤完毕后要set u = null
数组变量
数组是可以⽤相同名字引⽤的⼀系列变量,并⽤数字(索引)来识别它们。在许多场合,使⽤数组可以缩短和简化程序,因为可以利⽤索引值设计⼀个循环,⾼效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。
在Jass中,数组的上下界为0-8191,如果超过了界限则会出现错误
数组变量的命名规则与普通变量相同.
声明⽅法为local <;类型名> array <;变量名>// 注: 数组声明不允许赋初始值
数组变量在使⽤时,与普通变量的唯⼀区别是必须加⼀对中括号和整数索引(也可以是整数形式的变量)
例如:
local integer array i // 声明了数组变量i
local integer a = 4
set i[0] = 1
set i[1] = 2
set i[3] = i[1] + i[2]
set i[a] = 2*i[3] // 以整数变量作为数组索引
整数实数字符串以及类型转换
在对变量赋值时, 例如123 23.4 “string”这些也是有其类型的
例如 1.2 为实数. 3为整数⽽”jass2”是字符串, 这些实际上是⼀些常量
Jass中规定带⼩数点的为实数⼩数点前后如果为0则可以省略,例如下列是正确的⼩数写法
3.14159 -1.5708 .1234 170. -.3
不能把⼀个实数直接赋予⼀个整数变量, 例如下⾯的写法是错误的
local integer id = 123. // 错误123. 是⼀个实数
set id = 1.0// 错误1.0 是⼀个实数
没有⼩数点的数字为整数: 例如
2 107 512 -1 0
可以将⼀个整数赋予整数变量或实数变量, 例如
local integer I = 1
local real r = I // 正确因为整数可以⾃动转换为实数(隐式转换)
⽤双引号括起来的是字符串, 例如
“Hello”“yippee”“chimp”
字符串的特殊要求
“\”为转义符, 如果需要输⼊⼀个”\”(例如⽂件路径C:\Windows)
例如C:\Windows\ 应当写为“C:\\Windows\\”
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论