最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【系列】潛水黨的簡單lua教程四

2023-06-25 18:27 作者:未晞_a  | 我要投稿

前面三篇文章基本已經(jīng)講完了作圖需要用到的絕大部分內(nèi)容,剩下的一些知識已經(jīng)與作圖無關(guān)了,這里不再贅述。


下面開始正式講作圖部分。

而在使用lua作圖之前,就必須要了解到y(tǒng)dwe lua,以及common.j和blizzard.j的概念。


先從common.j說起,這里簡稱cj。

很多we新手應(yīng)該都會聽過所謂的j黨、t黨說法。

j黨就是使用jass語言制作地圖的作者

t黨就是使用trigger制作地圖的作者。


trigger就是觸發(fā)器。

而觸發(fā)器是大部分作者普遍使用的一種作圖方式。

觸發(fā)器的優(yōu)點(diǎn)是簡單直白、容易入門,我最早接觸作圖也是從觸發(fā)器開始熟悉的,甚至很長一段時(shí)間內(nèi)都是使用觸發(fā)器制作地圖。


jass是war3的程序語言,這一點(diǎn)很好理解。

這里我要糾正一個(gè)地方:在很多we新手的觀點(diǎn)里面,jass是英文,所以要學(xué)習(xí)jass需要有一定的英文基礎(chǔ),不會英文就寫不了jass。

這個(gè)認(rèn)知是非常片面且錯(cuò)誤的。

雖然jass的內(nèi)容都是英文,但并不是說,你不懂英文就寫不了。


想要用jass制作地圖,需要掌握的英文都是一些非常簡單的詞匯,如:

function:函數(shù)

takes:攜帶

returns:返回

return:同returns

end:結(jié)束

if:如果

then:然后

else:其他

call:聲明

loop:循環(huán)

exitwhen:出口

set:設(shè)置

globals:全局

……

上面列舉的只是一部分,但其他的關(guān)鍵詞也并不難記,頂多小學(xué)水平就能記住這些單詞,如果記不住,那我認(rèn)為,你不僅僅只是不適合學(xué)習(xí)jass,甚至可以說不適合學(xué)習(xí)這個(gè)詞匯。

平時(shí)打打游戲,群里吹吹比,刷刷手機(jī)短視頻不好嗎,為什么要折磨自己。


回歸common.j的話題。

cj是we的底層代碼,或者說底層api,里面的所有函數(shù)都可以通過編輯器來調(diào)用實(shí)現(xiàn)效果。

并且部分通用的函數(shù)已經(jīng)被封裝好,以觸發(fā)器的形式呈現(xiàn)在觸發(fā)編輯器內(nèi)。

而你寫的所有的觸發(fā),最終都會去執(zhí)行cj函數(shù)。


既然了解了cj,那么blizzard.j是什么呢?

這里簡稱bj,bj是對cj功能的一次封裝,因?yàn)閏j提供的只是最基礎(chǔ)的函數(shù),如果整個(gè)地圖全部通過cj來制作,那么代碼量會非常龐大,為了節(jié)省工作量,因此衍生才衍生出了bj。


這里我寫一個(gè)例子,方便更好的去理解bj為什么會存在,以及cj與bj的區(qū)別:


// cj寫法:使玩家一的鏡頭在0.3秒內(nèi)移動(dòng)到坐標(biāo)1314,1314

local player p?= Player(0) // 賦值玩家一

if (GetLocalPlayer() == p) then

call PanCameraToTimed(1314, 1314, 0.3)

endif


// bj寫法:使玩家一的鏡頭在0.3秒內(nèi)移動(dòng)到坐標(biāo)1314,1314

local player p?= Player(0) // 賦值玩家一

local?location o =?Location(1314, 1314) // 獲取點(diǎn)

call?PanCameraToTimedLocForPlayer(p, o, 0.3)

call?RemoveLocation(o)


這里可以看到,bj比cj多了一個(gè)賦值 類型為點(diǎn)的變量,以及多了一條清空點(diǎn)的變量。

除此之外,原本需要三行的代碼量被縮減到了一行,上面也提到了bj其實(shí)是對cj的封裝,那么封裝到底是什么呢?


封裝有兩個(gè)作用:

一:隱藏對象的屬性以及細(xì)節(jié)

二:簡化編程過程。


因?yàn)殡[藏了原生代碼的屬性以及細(xì)節(jié),封裝過后的api更容易讓不了解的人上手使用。

同時(shí)一定程度上提高了代碼的安全性,畢竟一層層的去剖析封裝過程也是一件很麻煩的事情。

當(dāng)然這些都不是最主要的。

在jass里面,封裝最主要的功能還是簡化編程過程。

因?yàn)檩斎氪罅康拇a比點(diǎn)擊一個(gè)個(gè)的窗口要累多了,而代碼只有在復(fù)制粘貼的簡便上具備了無可比擬的優(yōu)勢。


bj與部分cj加起來,就是we里的觸發(fā)編輯器的所有功能了。

當(dāng)然了,這里的we僅僅只是war3目錄里自帶的原生worldedit,并不包括ydwe以及雪月we之類的修改編輯器。


了解完cj和bj,再來說說ydwe lua:

ydwe lua是一個(gè)嵌入到war3的插件,可以讓作者編寫lua語言來執(zhí)行調(diào)用cj里的功能和函數(shù)。

這里簡稱ydlua。

所以如果想要通過lua作圖,了解ydlua是必不可少的一個(gè)步驟。


那么如何使用ydlua呢?

ydlua存在內(nèi)置庫,也可以說是內(nèi)置模塊,而代碼在war3地圖內(nèi)實(shí)現(xiàn)功能也是依靠這些內(nèi)置庫來完成。

分別是:

jass.common:等同于cj,包含了cj里面所有的函數(shù)


jass.globals:能夠獲取你在地圖內(nèi)預(yù)設(shè)的所有jass全局變量,包括bj內(nèi)變量


jass.japi:調(diào)用japi函數(shù),japi函數(shù)是ydwe添加的新功能,而這里的japi函數(shù),并不代表著編輯器內(nèi)已經(jīng)被封裝好的japi功能,具體用法后面會講。


jass.hook:可以對原本的cj函數(shù)下鉤子,下鉤子是什么意思呢?就是你可以獲取原本的cj函數(shù)攜帶的參數(shù),并且去改變它的參數(shù)。


jass.slk:可以在地圖運(yùn)行的時(shí)候讀取地圖內(nèi)的slk/w3 * 文件。

更直白點(diǎn)說就是,你可以通過slk來獲取地圖內(nèi)的物編數(shù)據(jù),ydwe里面,將slk的功能列入在japi內(nèi)。

原生編輯器是不存在直接獲取物編數(shù)據(jù)方式的。

slk包含了子項(xiàng):

unit:單位

item:物品

destructable:可破壞物、可摧毀的

doodad:裝飾物、小裝置

abilty:技能

buff:魔法效果

upgrade:科技、升級

misc:其他


以上這五個(gè)內(nèi)置庫基本覆蓋了所有的作圖需求,當(dāng)然也是最常用的五個(gè)內(nèi)置庫。

除此之外,還有另外一些不太常用的內(nèi)置庫,分別是:


jass.runtime:在地圖運(yùn)行時(shí)獲取lua信息或者修改lua的配置。


jass.console:與控制臺相關(guān),可以用來打開關(guān)閉控制臺,用于顯示一些處理信息之類。


jass.debug:用于解析ydlua的內(nèi)部機(jī)制。


jass.log:日志庫,因?yàn)槲覜]用過,具體功能也不了解。


以上便是有關(guān)ydlua和cj、bj的一些介紹。





【系列】潛水黨的簡單lua教程四的評論 (共 條)

分享到微博請遵守國家法律
进贤县| 绍兴市| 历史| 印江| 安龙县| 石柱| 兰州市| 科技| 开原市| 黄龙县| 天峻县| 文山县| 枣庄市| 泸西县| 凉城县| 华安县| 通许县| 黎城县| 长武县| 桦甸市| 望江县| 锦屏县| 巩义市| 信宜市| 永川市| 景洪市| 青阳县| 达州市| 香格里拉县| 裕民县| 多伦县| 涪陵区| 红桥区| 雷波县| 东丽区| 和田市| 奈曼旗| 鹤庆县| 都兰县| 余庆县| 隆德县|