网上科普有关“请教JASS新手入门全解答”话题很是火热,小编也是针对请教JASS新手入门全解答寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
Q:怎么学习Jass?
这个问题是大家"谈Jass色变"的最直接原因.原因就在于不知道从什么地方着手学习,从而也无法很好地了解Jass
.学习Jass英语水平很重要,但大家的英文水平大多都不行,而Jass是用英文编辑的,所以在此看
来,不懂英语的人对Jass是束手无策了.难道真的没有办法学习Jass了吗?其实还是有的,关键就看大家
有没有耐心和毅力.所谓耐心,就是在看不懂Jass的情况下不气馁,不急躁.相当初,我看Jass的时候也
是一脸茫然.但如果有耐心,看不懂的地方多问题或者查一下字典(偶的手机有字典功能,这帮了偶很大的忙.)
直到弄明白为止 ---- 这就是耐心.所谓毅力,就是不断地坚持,只有持之以恒,才能有所做为,这个道里
就不多说了,没有耐心和毅力的人永远也无法成功,更别说学比较简单的Jass了.不懂英语也不要紧,字母该
认得吧,认得字母就能查单词了,单词有中文解释的.当然,有些地方如果强译成中文,不免有些生硬,这个时候
就要多学多问了,还有就是自己多去思考,不要看不懂就不去管了,那样是非常没有专业精神的(因而BS之.)
当然,借些还可以提升一下英语的水平,何乐而不为呢!---- 不过还是给一些建议,千万不要有坐享其成的
心理,很多事情其实只要自己动一下手就能搞定的,就不要麻烦别人了,那样对自己能力的提升很不好.
=============================================================================================
Q: 怎么学习Jass中那些函数?
Jass函数是非常重要的一个部分,很多人看到N多的函数,就开始头晕了(因类要记住这些函数.)不过我从
来不去背什么函数,那样很无聊,而且进度很慢.建议大家用一些辅助工具,比如可以查询Jass函数的以及语
法高亮的工具.这样遇上不懂的函数就可以查询一下,也不用花太多精力去记忆一些无聊的内容了.
Jass函数可以分为两块:库函数和AI库函数.也许你还有疑问,听我说一下就明了.Blizzard.j 中的函数是
暴雪编写的自定义函数库,真正的库函数在common.j 和common.ai 中,也就函数名前面带有"native"的函数.真
的Jass库函数是common.j 和common.ai .所以说只有两部分,而大家学习Jass函数的重点也就放在这两个函数
库中.而Blizzard.j 里面的函数不需要记很多. 既然知道怎么学习Jass,那选什么学习工具呢?这个就看大家的情况了.
高手一般都用专业的编辑器编写,那样速度比较快,新手呢?我的建议是使用WE编辑. "触发编辑器--编辑--转换触发
为自定义文本" 可以将一个触发转化为Jass, 大家就可以借此比较容易地了解Jass在触发中所表现的形式. 这对于
步了解Jass是非常有帮助的. 而且对于一些不喜欢背函数的朋友也很有用.
=============================================================================================
Q: 如何编写自定义函数?
自定义函数(custom function) 是学习Jass之后一定要学会的.因为 Blizzard.j 中的官方函数的功能并不能满足大多数
人的需要, 甚至有些函数还有明显的漏洞. 这个时候, 我们该怎么办? 最好的办法就是"自己动手,丰衣足食"了. 这个时候
编写一些官方函数里没的自定义就十分有必要了.所以自定义函数(custom function)也就诞生了.
怎么编写呢? 其实这个问题可以向暴雪请教. Blizzard.j 函数库就是一个自定义函数库, 里面有很多的功能的编定逻辑是
大家学习Jass编辑的最好教程. 当然, 在这之前, 你得学会Jass的语法结构.( 这个可以看一下第一章.) function 复制代码=============================================================================================
Q: Jass的语法结构?
先看下这段函数: function TestFunctions takes nothing returns nothing复制代码 function InitGameCacheBJ takes string filename returns gamecache复制代码通过比较,这两段函数都有一个相似的地方那就是函数含有几个关键字:
A: function
B: takes
C: returns
这几关键字便是编定函数是重要的语法字段.那它们有什么意义呢?这个问题,我们通过多个例子的比较便可以打到答案. function InitGameCacheBJ takes string filename returns gamecache
set bj_lastCreatedGameCache = InitGameCache( filename )
return bj_lastCreatedGameCache
endfunction
复制代码 function TestFunctions takes nothing returns nothing
call InitGameCacheBJ("CustomFunction")
endfunction
复制代码 function LocalCacehValue takes nothing returns gamecache
if ( bj_lastCreatedGameCache = null ) then
set bj_lastCreatedGameCache = InitGameCache("CustomFunction")
endfunction
return bj_lastCreatedGameCache
endfunction
复制代码 function H2I takes handle h returns integer
return h
return 0
endfunction
复制代码通过以上的例子,大家发现了什么?每个函数都含有"function,takes,returns,endfunction".
基中"function,takes,returns"用于函数起始部分,而"endfunction"用于结束函数,这些是每个函数必备的语句.记起来很容易.
另外,函数还有一些其他的常用语法句:"set,call,if,then,endif,return,local,loop,exitwhen,endloop"等等.这些语句虽然
是非必要语句,但却是函数功能体现的重要组成部分.下面我就来说一下这些语句的功能:
A: set ---- set 是"变量赋值"功能.上面函数中的"bj_lastCreatedGameCache"是BJ函数库中的一个全局变量,用set可以为
其设定一个值.是常用语法之一.
B: call ---- call 是"函数调用"功能.用于启用一个函数,使这个函数发生作用."call InitGameCacheBJ("CustomFunction")"
就是在启用"InitGameCacheBJ"函数,而"CustomFunction"是"InitGameCacheBJ"函数运行所需要的参数表(参数下面会
讲到).
C: if,then,else,elseif,endif ---- 这些语句全是"条件限制"功能,这个功能大家在WE中体会过了.主要讲一下"elseif".
"elseif"是相对于"if"而言的,就是说当"if"所持有的条件不成立时,就检测"elseif"所持有的条件是否成立,如果成立,运行
"elseif"之下的函数功能."条件限制"的语法功能是Jass编写时重点语法之一,怎么用就看个人的体会以及逻辑思维能力
了.
D: return ---- return 是相对于"returns"而言的,被称之为"返回值"功能.其作用是"结束函数运行,并传'returns'设定的传回
值类型".这个函数用处很多," return bug"就是利用这个功能.值得注意的是,当函数中只有一个"return"语法时,就要注意
"returns"所设定的传回值类型是否与"return"所传回的值的类型是否一致了,否则会出错.当然,如果有多个"return"语法
就没有大多的限制.
E: local ---- local 是"声明局部变量"功能,其作用就是声明一个局部变量(相对于全局变量而言).其格式有以下几种:
"local integer i"
"local integer i = 0"
"local integer array i"
大家通过比较可以看出"local"后是个变量的类型,然后是变量的名称."array"是数组变量的声明格式.当然要注意以下几
点:
1 -- local 声明的变量尽量不要用全局变量的名称类型相一致
2 -- local 声明数组变量时,不能直接为数组变量赋值"local integer array i == 0//(这种声明方法是错的)".
F: loop,exitwhen,endloop ---- loop,exitwhen,endloop 称之为"循环"功能,这个功能也是最容易用错的功能之一.用时,要注
意 以下几点:
1 -- loop 是循环的开始,必需有结束句 endloop(这个不是结束循环功能,只是用于标示函数中循环设定的结束位置.) 循
环的结束是由 exitwhen 来控制的.exitwhen 所需要的是boolean值做为判断.
2 -- 没有exitwhen的循环是"死循环",双又称"无限循环".函数中就尽量不要出现(一般人用了,轻则当机,重则电脑要送去
修理的.)
3 -- 循环中,尽量不要用等待延迟之类的功能,特别是WE自带的循环数功能,当然这并不是说不可以用.用的进候注意一
下就可以了循环等待建议换成计时器,这样可以提升效率.
---------------------------------------------------------------------------------------------------------------------
大家也许有些疑问,为什么我还没讲"function,takes,returns,endfunction"的功能.这个其实自己通过多看多比较就知道了,
不用我多说些什么,以上便是Jass的语法结构了.讲了这么多还希望大家能亲自试验一下,才能体会这些功能真正的用处.
=============================================================================================
Q: 什么是参数表?
或许,听到这个有些耳熟吧!不是WE中有什么玩家参数之类的吗?不过我要讲的是函数的参数表. function LocalCacehValue takes nothing returns gamecache
if ( bj_lastCreatedGameCache = null ) then
set bj_lastCreatedGameCache = InitGameCache("CustomFunction")
endfunction
return bj_lastCreatedGameCache
endfunction
复制代码 function SetValue takes integer valueid, string valuename, handle value returns nothing
call StoreInteger(LocalCacehValue(),I2S(valueid),valuename,H2I(value))
endfunction
复制代码 function GetValue takes integer valueid, string valuename returns handle
return GetStoredInteger(LocalCacehValue(),I2S(valueid),valuename)
endfunction复制代码通过比较以上两个函数,不难看出"takes"后面有"integer valueid, string valuename, handle value"之类的语句.而我们称
呼这些语句为"参数",其所排列如列表一样,又称之为"参数表".参数表位于"takes"之后,当没有参数时用"nohting"表于没有
参数表.列出参数首 先列出参数的类型,然后是参数名称,当有多个参数时, 参数与参数之间用","隔开.当然要注意以下几
点:
1 -- 当有多个参数时,参数名称不能重复
2 -- 一个参数包含"参数类型"和"参数名",当一个函数有了参数时,就不能用"nothing"了.
3 -- 参数可以在其所代入的函数中随意使用,而函数中的变量名不得与参数名相同.
参数的用途呢?这个用变量来解释要好一些.在函数中,参数的真正作用就是传递数据,这点和变量的作用是相同的,所以上
面的函数中的参数的用法和变量差不多.和变量所不同的是,参数不能用"set"语法来赋值,参数的值在函数中是不能变化
的,相当于"只读"属性.有参数的函数一般称之为"功能性函数",而无参数的函数一般可以称之为"非功能函数".两种函数的
用法是不同的,用的地方也有限制.这
点当大家对函数熟悉后自然就知道了(当然这也是我认为Jass没有太多研究必要的原因之一.)
=============================================================================================
Q: return bug 是什么?怎么用?
return bug 是我对Jass感兴趣的地方之一,return bug使Jass功能得到了极大的扩展,我想如果没有return bug,Jass可能
将一无是处,当 这种想法只是个人的意见. function H2I takes handle h returns integer
return h
return 0
endfunction复制代码上面的函数就是传说中的return bug!至于原理,大家可以看以前我发过的"return bug解析",其中介绍
了一些return bug的由来,相信看过之后会有所启发.return bug的用途就是传递数据,一般是配合缓存来使用.所以说到
return bug,就必需和缓存一起讲缓存,就是缓冲储存(这个一般网页用得多.)其实WE区有很多不错的缓存教程,所以在此
不多说什么了.只说以下两点:
1 -- return bug利用数据转换的方法,将handle类的数据作为整数,从而使用"StoreInteger"这个功能将handle类的数据存
入缓存之中. 当然,这个看起来没啥必要,但实际上,魔兽争霸缓存功能只能储存"integer,string,boolean,real,unit"五种类型
的数据,而handle 类的数据是分类型最多的数据类,除的"unit",其他的都没有储存功能.
2 -- return bug利用反转换,又将整数还原为handle类的数据,并用"GetStoredInteger"从缓存中读取存入的数据,而读取的
数据可以直接使用.(这点和变量的功能差不多),而该数据若再需要重新赋值必须用"StoreInteger"再储存一次新的数据,覆
盖原来的数据. 再次读取是,所读取的值就改变了.所要注意的是,读取的值和存入的值的类型要一致,否则不是出错就是没
用作用.
-----------------------------------------------------------------------------------------------------------------------
另外,我已将return bug的功能加入触发编辑器中,在WE区的置顶帖里.当然,为了适应WE的逻辑需要,对函数又进行了一
些加工.return bug做为Jass中的一个难点,学会之后所得的回报也是巨大的.以下是有关于return bug的文章链接地址:
关于“请教JASS新手入门全解答”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[书兰]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202504-1849.html
评论列表(4条)
我是小熊号的签约作者“书兰”!
希望本篇文章《请教JASS新手入门全解答》能对你有所帮助!
本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上科普有关“请教JASS新手入门全解答”话题很是火热,小编也是针对请教JASS新手入门全解答寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助...