|
楼主 |
发表于 2006-3-28 11:36:31
|
显示全部楼层
第二章 预备知识
2.1 Jass语言的源代码
Jass语言的扩展类型定义, 基本函数和常量取值都是直接调用游戏的函数, 他们被存放在war3x.mpq和war3patch.mpq内的Scripts\\common.j和Scripts\\common.ai中
Jass还有一些扩展函数, 放在war3x.mpq和war3patch.mpq内的Scripts\\blizzard.j和Scripts\\common.ai中
common.ai包含了用于设计ai的大量内部函数和扩展函数, 但对于我们只用Jass进行普通脚本编写的人来说可以忽略这个文件内的代码
其中war3patch.mpq里的文件是打了升级补丁后的最新版本, 可以使用mpq工具提取, 如果不懂也没有关系, 我们提供了提取好的1.15的Jass源代码文件压缩包.
2.2 Jass语言中的注释(comment)
任何写在//后面的都是注释内容, 这也是Jass唯一的注释语法, 后面的例子会多处用到这个注释符号, 这个符号和后面的注释只是用于解释一些东西, 大家在看完一些例子后自己编写Jass代码时完全可以去掉
2.3 Jass里的数据类型(data type)
基本数据类型有:
==========================================================================================
integer 整数型, 相当于C语言里的int, 取值范围为 -2147483648到2147483647
可以有4种形式的方法来写整数型的值:
1)全部为数字, 第一个数字不为0, 这是10进制表示方法, 如: 23
2)全部为数字, 第一个数字为0, 这是8进制表示方法, 如: 023(相当于19)
3)0x(x可以是大写)开头, 后面全部为数字(16进制的数字包含A,B,C,D,E,F, 分别表示10,11,12,13,14,15, 可以为小写), 这是16进制表示方法, 如: 0x23(相当于35)
4)用单引号括起4个字母, 表示单位/技能编号对应的整数, 如\'Hpea\'
real 实数型, 相当于C语言里的float, 取值范围为 1.5 x 10^(-45) .. 3.4 x 10^38
boolean 布尔型, 只有真假两个值, 用于表示一个判断式是否正确, 分别用true和false来标示
string 字符串, 用双引号括起的若干个字母, 空字符串表示为\"\"
字符串中遇到\"可以用\\\"来表示这是一个字符串中的引号
如: \"abc\\\"def\\\"\", 就表示字符串abc\"def\"
handle 句柄型, 相当于C中的指针类型, 它指向内存的一个地址, 用于表示一个较大的结构, 是很多数据类型的基类型
code 代码型, 用于表示一个函数地址, 通常用于传值时传递一个函数, 其值的形式为function <函数名>
如: function codeexample
注意: 这个值表示的函数必须在前面定义过, 关于函数, 见3.3
==========================================================================================
除了基本数据类型, Jass还提供了大量扩展数据类型, 都是以handle为基类型, 我们先来看定义扩展数据类型的语法:
==========================================================================================
type <数据类型> extends <基类型>
==========================================================================================
我们在自己的脚本中除非有非常特殊的需要, 否则基本不会用到这个语法, 介绍这个语法是为了大家能更好地读common.j的源代码
common.j中扩展的类型如widget, player, trigger, ability, boolexpr等都是基于handle, 除了unit, destructable和item是基于widget, buff是基于ability, conditionfunc, filterfunc是基于boolexpr和几个非常罕用的类型, 通过类型名的英语含义可以清楚地了解这个类型表示的数据的类别
2.4 Jass里的表达式(expression)
表达式可以是直观可见的值, 也可以是函数, 计算式等, 如:
==========================================================================================
数值型/实数型: 1, 3, 5565.33, ........
字符串: \"Xasfsfs\", \"Greedwind\", ........
布尔型: true, false
函数: GetTriggeringUnit()
GetUnitLoc(GetTriggeringUnit())
计算式: (a + b) * c + d
===========================================================================================
计算式中可以存在的操作符有:
==========================================================================================
数学计算:
+, -, *, / 加, 减, 乘, 除(注意整数除法的结果仍然为整数, 是舍去小数点的结果)
比较符号(返回的是boolean布尔值):
>, <, >=, <=, ==, != 分别是大于,小于, 大于等于, 小于等于, 等于(注意不是=), 不等于
布尔值运算:
and, or, not 条件与, 或, 非
字符串运算:
+ 字符串相加, 如\"abc\" + \"def\"的结果\"abcdef\"
==========================================================================================
优先级大家不用记忆很多, 只要记住先*,/后+,-, 先数学运算再比较最后布尔值运算, 括号可以改变运算优先级到最高这3点就可以了
[ 本帖最后由 freeman_666666 于 2006-3-28 11:44 编辑 ] |
|