下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、JASS 基礎教程作者 :天零萃夢轉(zhuǎn)載請注明本文出處: 本文假定您擁有WE 觸發(fā)器最基礎的知識以及熟悉Windows 的基本操作文中所用UI 版本 : 夜天新手助推器漢化UI)例如只對某玩家播放音效, 或者讓某些華麗的技能支持多人釋放等.Jass 可以定義局部變量以及自定義函數(shù),增加設計的方便性. 熟練使用Jass 可以很好的提高效率, 往往 Jass幾個輸入字符就能完成的事情,GUI 需要點選動作無數(shù)次才能做完.GUI雖然可以完成幾乎所有的功能,但是對于內(nèi)存釋放能力太差,轉(zhuǎn)化成的 Jass代碼會執(zhí)行許多額外的動作 . 用 Jass可以寫出比GUI 效率更高的代碼,可以更靈活和更有效率地控制地
2、圖運行Jass 的基本使用方法在地圖制作時 ,Jass 的基本使用方法有3 種1. 自定義腳本區(qū)編輯 Jass (位置在觸發(fā)編輯器左側(cè) ,觸發(fā)器樹的最頂端 ,左鍵點擊地圖名字即可進入 )2. 觸發(fā)器轉(zhuǎn)換為代碼后編輯 Jass (選定觸發(fā)器后 ,選擇菜單 -編輯 -轉(zhuǎn)化為自定義文本 ,確定后可將觸發(fā)器轉(zhuǎn)換為 Jass代碼 )3.在觸發(fā)器中直接編輯Jass (使用動作 -自定義代碼動作來輸入Jass)一 變量篇變量 是指在運行過程中隨時可以發(fā)生變化的量,與其相對的是常量 ,但是在地圖中不允許自定義常量,所以我們這里只說變量.變量是數(shù)據(jù)的臨時存放場所.在代碼中可以只使用一個變量,也可以使用多個變量,
3、變量中可以存放文字 ,數(shù)值 ,單位以及玩家等.由于變量讓你能夠把程序中準備使用的每一段數(shù)據(jù)都賦給一個簡短,易于記憶的名字 ,因此它們十分有用.變量分為 全局變量 和局部變量 ,全局變量是指在任何地方(任意觸發(fā)器 ,任意函數(shù)中 ) 都可以使用的變量 ,例如我們在觸發(fā)器中創(chuàng)建的變量. 而局部變量 ,則是僅僅在觸發(fā)器(或函數(shù) )當前運行時才存在的變量.創(chuàng)建全局變量 只能在變量編輯器中設置.變量的創(chuàng)建和使用方法1. 變量的命名規(guī)則要使用變量 ,必須給變量取一個名字,就好像每個人都有自己的名字一樣.在 JASS中 ,變量的命名必須遵循一下規(guī)則1. 變量名必須以字母開頭 ,名字中間只能以字母 ,下劃線 ”
4、或數(shù)字組成 ,最后一個字符只可使用字母或數(shù)字2. 在作用范圍內(nèi)不可使用相同名字的變量3. 變量名不能與任何函數(shù)名字相同4. 變量名不能是 Jass中保留的關鍵字 (關鍵字詳見附錄 2)例如strName1intMax_LengthintLessonstrNo3等是合法的變量名,而 A&Bright_3M_Number 是非法的變量名需要注意的是變量名是區(qū)分大小寫的, 也就是說, Jass 不會認為“ a”和“ A”是同一種東西 .定義和使用變量時,通常要把變量名定義為容易使用閱讀和能夠描述所含數(shù)據(jù)用處的名稱,而不要使用一些難懂的縮寫如A 或 B2 等 .這樣會增加理解的難度.例如 , 要記錄的
5、數(shù)值是一個單位的生命值, 可以寫為unitLife或者danWeiShengMingZhi ,這樣僅僅通過變量名就能知道我們記錄的是什么,增加閱讀難度的話如果出現(xiàn)了BUG, 需要排錯時是很困難的.2.變量的聲明在變量使用前,必須在代碼中進行聲明,即創(chuàng)建該變量.在 GUI 中 ,我們可以使用變量編輯器來聲明新變量在這里聲明的變量,是全局變量 , 這也是唯一聲明全局變量的方法(在僅使用 WE 的前提下 ).所以我們這里暫時不講全局變量的聲明, 只用知道 聲明全局變量就在 變量編輯器 中創(chuàng)建就可以了注 : 為了區(qū)分全局變量和局部變量的名字 ,GUI 自動在所有變量編輯器設置的全局變量名的前面都加了
6、udg_ 前綴 , 因此圖中的變量名實際為 udg_unitLife局部變量的聲明格式為local 變量類型 是用來區(qū)分變量儲存的數(shù)據(jù)類型,比如用于儲存單位,就要使用單位unit注 :Jass中變量類型與WE 中變量類型對照表見附錄1例 :local unit trigUnit這樣就聲明了一個類型為單位的變量, 變量名為trigUnit另外 變量的聲明要求在所有其他動作的前面.例如 :local unit trigUnitlocal unit dmgUnitlocal unit trigUnitlocal unit dmgUnitlocal unit targetUnit表達式執(zhí)行的結(jié)果與變量
7、類型要相同例如聲明一個變量trigUnit 為觸發(fā)單位local unit trigUnit = GetTriggerUnit()例如聲明一個變量playerId 為 觸發(fā)玩家索引號, 另一個變量I 為 174 (整數(shù) : integer )local integer playerId = GetConvertedPlayerId(GetTriggerPlayer()local integer I = 1743. 變量的使用聲明完變量后,接下來就是如何使用變量的問題了.對于任意變量通用的賦值操作符 是 “=”它用于將后面的表達式計算后把結(jié)果賦予變量.表達式得到的結(jié)果要求與變量類型相同另外 Ja
8、ss要求 ,除初始化之外, 對變量進行賦值時必須使用set 關鍵字格式為set = 例如 :local unit trigUnitset trigUnit = GetTriggerUnit()對于整數(shù) ,實數(shù)來說 ,可以使用普通的計算符號來進行計算操作.其中+ - * /分別對應著加減乘除(另外 還表示負號 )例如local integer a = 1set a = a + 1量操作舉例 :變量的值互換local integer a = 3聲明方法為local array 3 為整數(shù)而 ”jass2”是字符串 , 這些實際上是一些常量Jass中規(guī)定帶小數(shù)點的為實數(shù)小數(shù)點前后如果為0 則可以省略
9、 ,例如下列是正確的小數(shù)寫法.1234170.不能把一個實數(shù)直接賦予一個整數(shù)變量, 例如下面的寫法是錯誤的local integer id = 123.是一個實數(shù)set id =例如整數(shù)可以轉(zhuǎn)換為實數(shù), 實數(shù)轉(zhuǎn)為字符串, 等等 .其函數(shù)名列舉如下:R2S實數(shù)轉(zhuǎn)字符串local string s = R2SS2R字符串轉(zhuǎn)實數(shù)local real r = S2R(“1.200”)I2S整數(shù)轉(zhuǎn)字符串local string s = I2S(123)S2I字符串轉(zhuǎn)整數(shù)local integer I = S2I(“345”)I2R整數(shù)轉(zhuǎn)實數(shù)local integer r = I2R(1234)R2I實數(shù)
10、轉(zhuǎn)整數(shù)local integer I = R2I注 : 整數(shù)轉(zhuǎn)實數(shù)時 . I2R 可省略 例 : local real r = 3(隱式轉(zhuǎn)換 )注 : 在實數(shù)轉(zhuǎn)整數(shù)時 , 小數(shù)點后的內(nèi)容將被忽略例 : local integer I = R2II 的值將被設置為1在計算時如果同時出現(xiàn)實數(shù)和整數(shù), 那么結(jié)果為實數(shù)例 :local integer i = 3*其中邏輯操作符可以對條件進行操作 ,用以判斷全部條件成立或者任意條件成立等復合條件分支語句1. if 語句在 Jass中判斷條件的格式為if thenendif其中條件表達式 是結(jié)果為true (真 )或false(假 )的表達式,例如3 5
11、的結(jié)果為false(假 ),如果表達式的值為true ,則做在if與endif之間的動作式為 :if thenelseendif當條件表達式的值為true 時 ,執(zhí)行動作1,當為 false 時執(zhí)行動作2請看下圖的例子:此觸發(fā)器在游戲中顯示:a 小于或等于ba 的值增加了3a 大于 b要注意的是與”大于 ”相反的是 ”小于或等于 ”2.if - elseif語句在 if 語句中 ,允許使用elseif 來進一步進行條件的判斷,格式如下if thenelseif thenendif等同于if thenelseif thenendifendif要注意的是每一個if 都要對應一個endif, 但是
12、elseif 不用3. if 的嵌套在 if 語句中 ,允許嵌套使用 if,但要保證每個 if 都要有 endif 來配對而且一個if 語句不能分割其他的if 語句例如 :if 53 thenif 32 thenelseif 310 thenendifendif這樣是可以的但是如果像下面這樣,可能就會達不到想要的結(jié)果if 53 thenif 25 or (21 and 54) thenendif循環(huán)語句需要考慮的2 個因素 : 要哪些內(nèi)容執(zhí)行循環(huán)以及到什么時候循環(huán)停止如果循環(huán)沒有停止循環(huán)的條件,那么就會成為死循環(huán)(也就是永遠到不了頭),但是可以放心的一點是Jass 中有操作數(shù)限制來避免死循環(huán),
13、當一個循環(huán)中操作數(shù)太大時,會自動中斷循環(huán),并且令動作中斷.以防止死循環(huán)的發(fā)生.但我們?nèi)砸苊馑姥h(huán).因為這會使循環(huán)體后的所有動作失效循環(huán)語句的使用循環(huán)語句的格式為loopexitwhen endloop其中exitwhen 可以在任何地方, 允許不加exitwhen或有多個exitwhen循環(huán)體為loop 與 endloop 之間的代碼當 成立時 , 則退出循環(huán) ,并繼續(xù)執(zhí)行 endloop 后的語句請看下圖例子 :此觸發(fā)器將在游戲中顯示12345678910可以看到顯示 a 的值被重復執(zhí)行了10 次 ,a 的初始值為1,每次執(zhí)行后都會加1,在 a10 也就是a 等于 11 的時候循環(huán)結(jié)束例
14、2: 顯示 1-n 的階乘 ,并把它們儲存在數(shù)組中此觸發(fā)器在游戲中顯示為126241207205040403203628803628800此觸發(fā)的功能是顯示從1 到 a_max 的階乘并把它們儲存在數(shù)組中,這里 a_max 設置為 10(階乘運算 : 非負整數(shù) ,0 的階乘是1, n 的階乘是 1*2*3*.*(n-1)*n )循環(huán)的嵌套循環(huán)語句允許像if 語句那樣嵌套 ,要注意的是loop 與 endloop 配對請看下圖例子 :此觸發(fā)器在游戲中顯示為123246369循環(huán)的注意事項循環(huán)需要注意的就是確保條件能夠成立例如local integer a = 1loopexitwhen a 10
15、endloop在這個循環(huán)里, a10 是不可能成立的, 因為 a 的值始終是1,沒有任何語句改變它.四 函數(shù)將一段經(jīng)常需要使用的代碼封裝起來,在需要使用時可以直接調(diào)用,這就是函數(shù) .函數(shù)允許在調(diào)用時傳遞數(shù)據(jù)給函數(shù)體,然后可以返回一個數(shù)據(jù)給調(diào)用者.我們平時用觸發(fā)的時候,編輯各種觸發(fā)動作,事實上也是在調(diào)用各個函數(shù)的一些功能封裝起來,然后做成一條條的觸發(fā)供我們使用像觸發(fā)單位 ,觸發(fā)玩家等 ,這些動作 ,就是一些函數(shù),GUI 里的動作就是把經(jīng)常用localunitu=GetTriggerUnit()所以我們無法在一個觸發(fā)器動作里寫函數(shù)(因為觸發(fā)器動作本身就是一個函數(shù))編寫函數(shù)的一般方法,是在地圖的自定
16、義腳本區(qū)或?qū)⒂|發(fā)器轉(zhuǎn)為代碼后編寫(請溫習前言部分Jass的基本使用方法).為了更直觀 ,將在自定義腳本區(qū)編寫Jass函數(shù) .編寫一個函數(shù),要求得到兩個整數(shù)的乘積function M takes integer a , integer b returns integerreturn a*bendfunction因為整數(shù)與整數(shù)的乘積仍是整數(shù),所以返回值為整數(shù)return語句執(zhí)行時 , 會先計算右邊表達式的結(jié)果, 然后返回該值要注意的是區(qū)分return 和 returns , 前者為返回 (具體的值 ),后者為函數(shù)頭中返回值類型調(diào)用此函數(shù)來工作首先將函數(shù)放到自定義代碼區(qū).然后就可以在其他地方調(diào)用它了
17、需要注意的一點是, 如果要調(diào)用函數(shù),那么要保證該函數(shù)在調(diào)用者的前面例如 :function a takes nothing returns integerreturnb()過這些函數(shù) ,我們可以對游戲進行操作.例如 ,創(chuàng)建單位 ,創(chuàng)建觸發(fā) ,設置單位生命 ,命令發(fā)布傷害等等. 這些函數(shù)的大部分,已經(jīng)被制作到了GUI 中,我們可以使用動作 ,然后轉(zhuǎn)換成代碼來查看到這些函數(shù)的具體名字,當然最好的方法是下載Jass專用的編輯器.使用 CJ函數(shù)的方法與普通函數(shù)相同.例如local unit u = GetTriggerUnit()以上 ,就是 JASS基礎教程 ,所有 JASS的基本語法已經(jīng)包括在內(nèi).
18、由于編寫倉促不免有疏漏,請與作者聯(lián)系Email五附錄附錄一 .關鍵字typenativeglobalsendglobalslocalendfunctionfunctiontakesreturnsreturnsetcallendifelseififthenelseendlooploopexitwhenandornotarrayintegerbooleanrealstringcodehandlenothingnullfalsetrueagenteventplayerwidgetunitdestructableitemabilitybuffforcegrouptriggertriggercondit
19、iontriggeractiontimerlocationregionrectboolexprsoundconditionfuncfilterfuncunitpoolitempoolracealliancetyperacepreferencegamestateigamestatefgamestateplayerstateplayerscoreplayergameresultunitstateaidifficultyeventidgameeventplayereventplayeruniteventuniteventlimitopwidgeteventdialogeventunittypegam
20、espeedgamedifficultygametypemapflagmapvisibilitymapsettingmapdensitymapcontrolplayerslotstatevolumegroupcamerafieldcamerasetupplayercolorplacementstartlocprioraritycontrolblendmodetexmapflagseffecteffecttypeweathereffectterraindeformationfogstatefogmodifierdialogbuttonquestquestitemdefeatconditionti
21、merdialogleaderboardmultiboardmultiboarditemtrackablegamecacheversionitemtypetexttagattacktypedamagetypeweapontypesoundtypelightningpathingtypeimageubersplathashtableconstant附錄二 .WE 與 JASS變量類型對照JASS變量名稱GUI Trigger 變量名稱說明abilityinteger技能aidifficultyinteger對戰(zhàn) AI 難度alliancetypeinteger盟友類型attacktypeAtta
22、ck Type攻擊類型blendmodeinteger合成模式booleanBoolean布爾boolexprinteger布爾表達式buffinteger強化法術(shù)buttonDialog Button對話框按鈕camerafieldinteger鏡頭區(qū)域camerasetupCamera Object鏡頭物體codeinteger程序代碼conditionfuncinteger條件函數(shù)defeatconditionDefeat Condition失敗條件destructableDestructible可破壞的dialogDialog對話dialogeventDialog Button對話事件
23、effectSpecial Effect特效effecttypeinteger特效類型eventinteger事件eventidinteger事件代碼fgamestateinteger游戲狀態(tài) (f)filterfuncinteger過濾函數(shù)fogmodifierVisibility Modifier可見度fogstateinteger可見狀態(tài)forcePlayer Group玩者群組gamecacheGame Cache游戲暫存gamedifficultyinteger游戲難度gameeventinteger游戲事件gamespeedGame Speed游戲速度gamestateintege
24、r游戲狀態(tài)gametypeintegerv游戲類型groupUnit Group單位群組handleinteger句柄igamestateinteger游戲狀態(tài) (I)integerInteger整數(shù)itemItem物品itempoolinteger物品池itemtypeItem-Class物品分類leaderboardLeaderboard計分板lightningLigntning線狀特效limitopinteger比較locationPoint點mapcontrolinteger玩家控制者mapdensityinteger地圖密度mapflaginteger地圖標記mapsettinginteger地圖設置mapvisibilityinteger地圖可見性multiboardMultiboard面板multiboarditeminteger面板項目placementinteger起始位置分布playerPlayer玩者playercolorPlayer Color玩者顏色playereventintege
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物標志物在藥物臨床試驗中的轉(zhuǎn)化技術(shù)研究
- 生物化學虛擬實驗微課資源開發(fā)
- 深度解析(2026)《GBT 20154-2024低溫保存箱》(2026年)深度解析
- 深度解析(2026)《GBT 20042.1-2017質(zhì)子交換膜燃料電池 第1部分:術(shù)語》(2026年)深度解析
- 稅務總監(jiān)崗位能力考試題庫含答案
- 網(wǎng)站編輯面試題集及寫作技巧
- 保險精算師風險評估面試題及答案
- 美容美發(fā)師專業(yè)技能鑒定題目及答案
- 公務員行政能力測試面試題目詳解
- 大唐集團人力資源部長面試題庫與評分標準含答案
- 高標準農(nóng)田建設環(huán)境應急預案
- 大學英語2a試題及答案
- 工業(yè)廠房水電安裝施工方案
- 班組長管理經(jīng)驗匯報
- 【MOOC】數(shù)據(jù)結(jié)構(gòu)與算法-北京大學 中國大學慕課MOOC答案
- 《我的白鴿》課件
- 中醫(yī)內(nèi)科學智慧樹知到答案2024年浙江中醫(yī)藥大學
- 縫紉機銷售協(xié)議范例
- 安全工器具登記臺賬
- 《荷塘月色》《故都的秋》比較閱讀-統(tǒng)編版高中語文必修上冊
- 中央電大護理專業(yè)本科通科實習出科考核病歷
評論
0/150
提交評論