【教程】新手之路 - Jass中的自定义函数
[font=宋体]请选看完初并记住 "初级教程" 中的所有内容. 本章不再对以前的知识进行重复讲解.----------------------------------------------------------------
[size=4][b][color=#ff0000]第三章 变量的声明[/color][/b][/size]
----------------------------------------------------------------
[url=http://bbs.wow8.org/thread-26530-1-4.html][size=3][b][bsz]局部变量的声明事项[/bsz][/b][/size][/url]
在学习自定义函数之前,我们要学习两个内容. 一个是变量, 另一个是库函数.关于库函数, 笔者不做多的说明, 建议打开common.j, blizzard.j这两个Jass脚本文件, 这两个文
件也称之为库函数, 库函数很多, 但我们不需要去花太多时间去记忆他们, 用WE, 可以将触发语句转化为Jass文本, 再配合JassShopPro便可以轻松的了解函数. 如果你需要知道函数的作用,可以下载 "Jass完全手册", 可以查到一些Jass函数的简单说明.
现在,就让我们来了解一下变量.
[color=#cf4809]在Jass中, 变量分为三类: [b]全局变量, 局部变量, 参数变量[/b].[/color]
---->[b]全局变量, 在初级教程已经说过全局变量的声明方法. 全局变量, 顾名思义, 就是在整个Jass脚本中都可以使用的变量.触发器声明的是用户自定义全局变量,前缀为"udg_",因此,我们可以在用户声明的变量名前加上"udg_",以便于在Jass下访问该变量.WE中的触发器名称加前缀"gg_trg_"便是这个触发器所使用的变量了.[/b]
---->[b]局部变量, 前面我只说了局部变量的声明方法. 局部变量只能在函数内部使用, 当函数退出调用后, 局部变量也随之退出调用. 声明局部变量, 必须在函数的开头部分.数组变量不能直接赋值, 这些都是声明局部变量时,所必须遵守的规则.[/b][jass]function MyFunc takes nothing returns nothing
local integer a
local unit u = GetTriggerUnit()
// ----> 要在函数头部声明局部变量,如果在其他地方声明,则会出错. <----
set a = GetUnitUserData( u )
set u = null
endfunction[/jass]---->[b]参数变量, 参数是指函数声明时, 所声明的需要传入的数据类型. 在原则上, 参数属于变量. 参数与局部变量的使用原则很像, 只能在所声明的函数中使用. 另外, Jass中的参数可以在函数内部被重新赋值.[/b][jass]function Sum takes integer a, integer b returns integer
local integer c = a + b // 参数可以在函数内部使用
set a = 0 // 参数也可以做为局部变量, 被重新定义数值. 不过建议不要随意定义, 以免引起混乱.
set b = 0
return c
endfunction[/jass][color=#00ff9f]变量的优先顺序: 优先顺序是指, 当变量名相同时, 优先顺序高的变量会优先使用.[b]全局变量, 局部变量, 参数变量 的优先顺序为 局部变量与参数变量同级, 全局变量的优先顺序最低[/b]. 意思是说, 当局部变量,参数变量 与全局变量同名时, 会优先使用局部变量和参数变量, 但优先顺序相同的情况下, 是不允许出现变量名同名的情况的.[/color]
**********下面,我们再来分析一下变量的类型.**********
Jass中,变量的类型共有六个:[b][color=green]integer, real, string, boolean, handle, code[/color][/b]
[b]integer[/b] [color=green]整数变量, 32位有符号整数型(4字节) 取值范围:[-2147483648, 2147483647] (2^31+符号位)[/color]
[b]real[/b] [color=green]实数变量(单精度浮点型,4字节) 取值范围:[1.5*10^(-45), 3.4*10^38][/color]
[b]string[/b] [color=green]字符变量(长度不定)用来记录字符, 英文数字等字符号占1字节,汉字点2字节,全角文字符号点2字节.[/color]
[b]boolean[/b] [color=green]布尔变量(1字节), 只能记录true或者false.用于条件判断语句.[/color]
[b]handle[/b] [color=green]句柄变量(数据指针型)Jass语法的一个基础类型,由它可以派生出其他数据类型的指针.用来指向War3中HandleTable表所指向的内存指针地址.[/color]
[b]code[/b] [color=green]函数变量(函数指针型)用于指向内存中的函数地址(该地址是真实的函数内存指针地址).[/color]
关于handle派生的数据类型: 1.16有81种,1.17又新增5种, 现在版本已经到了1.21, 派生的数据类型多达92种, 但由handle派生的数据类型, 都可以用handle类型数据来划分. 统一称为handle, 但在具体使用时, 我们会更多的使用其派生的类型, 比如 unit, item, group, player等类型数据. 这些可以在common.j文件中查看.
派生格式: [color=#ff0000]type ****** extends handle //此处即使不是handle,也是其他由handle继承而来的类型 [/color]
好了,现在绍介完了变量, 可以开始学习自定义函数了. 在学习之前, 我们要明确, 自定义函数的用途是什么? 这些你可以到Blizzard.j中查看暴雪自定义的函数.进而了解自定义函数的用途. 在声明, 使用自定义函数时, 我们又要注意哪些呢?
----------------------------------------------------------------
[size=4][b][color=#ff0000]第四章 自定义的声明[/color][/b][/size]
----------------------------------------------------------------
自定义函数, 是相对于库函数而言的. Jass的标准库函数是common.j, 而Blizzard.j是暴雪函数, 虽然也称为库函数, 但为了与标准库函数区分, 我们称之为 "暴雪函数"或者"BJ"函数. Blizzard.j是暴雪公司的自定义函数, 一般情况下, 触发器中使用的大部分功能的源码是BJ函数. 而非CJ标标准库函数. 当然,我们并不能说, BJ函数效率低下, 在某些情况下, BJ函数的作用远大于CJ标准函数. BJ函数给我们提供了很大的方便. 而在学习自定义函数时, 我们应该从BJ函数着手, 来学习自定义函数.
首先, 我们要说明一下, 函数的分类: 按照函数的声明格式, 可以划分为:
---->无参数,无返回值函数
---->有参数,无返回值函数
---->无参数,有返回值函数
---->有参数,有返回值函数
以上四类函数, 只是形式上的不同而已.[b]当然, 声明,书写以及用途也有所不同.在编写自定义函数之前, 我们要先进行一些策划, 即我们创建的自定义函数的具体作用是什么,以及自定义函数的具体写法,还有所要使用的数据. 这个是编写每一个函数之前所必须思考的内容, 所以这个又称之为"[color=#ff0000]编程思想[/color]","[color=#ff0000]编程思维逻辑[/color]"[/b]. 具有好的"编程思维", 在写函数时,会事半功倍, 也会让所编写的函数清晰美观明了. 我们天生并非都具有很明确的"编程思维", 所以我们只能通过不段的锻练, 提升我们对于编程的理解. 怎么锻练呢? 就是多看多写函数, 包括其他人写的或者CJ,BJ函数, 等具有明确的"编程思维"时, Jass也可以宣告师成了![jass]// ----> 无参数,无返回值函数
function MyFunc001 takes nothing returns nothing
return
endfunction
// ---->有参数,无返回值函数
function MyFunc002 takes unit u returns nothing
call KillUnit(u)
return
endfunction
// ---->无参数,有返回值函数
function MyFunc003 takes nothing returns player
return Player(0)
endfunction
// ---->有参数,有返回值函数
function MyFunc004 takes integer a, integer b returns boolean
local boolean b = false
if a > b then
set b = true
endif
return b
endfunction[/jass][/font]
[[i] 本帖最后由 feelerly 于 2009-1-8 19:47 编辑 [/i]] 很好很强大- -|||| 这些是什么(葱头:28)
我怎么一点都看不懂啊(葱头:27)
请大家鼓掌支持
我z喜欢,请大家鼓掌支持,谢谢---------------
WOrld of warcraft Power Leveling,cheap [url=http://www.wowgoldcc.com]wow power leveling[/url] at the [url=http://www.wow-power-leveling.org]wow power leveling[/url] web ![url=http://www.wowgoldweb.com]wow power leveling[/url] 谢谢楼主,正在学习这个。 资料太少啦。麻烦lz多贡献点啦。 。。被挖起来了。 那个001 002 003是什么意思
(葱头:19)
页:
[1]