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

歡迎光臨散文網 會員登陸 & 注冊

潛水黨的簡單lua教程五

2023-09-18 21:15 作者:未晞_a  | 我要投稿

之前簡單的說明了一下lua以及jass的語法。

這里貼一下lua的基礎教程鏈接:https://www.runoob.com/lua/lua-tutorial.html

這個教程概括了所有l(wèi)ua的基礎內容,十分的通俗易懂。


下面開始說說如何創(chuàng)建一個可以編寫lua的基礎war3地圖。

首先打開YDWE的配置文件,見示例1

示例1

當然除了編輯器界面,還有另外一種方法打開配置文件,見示例2

示例2

找到配置文件雙擊點開后,找到魔獸插件項,勾選上lua引擎,見示例3。

示例3

然后再切到系統(tǒng)關聯(lián)項,勾選上關聯(lián)地圖文件的.w3x和.w3m,見示例4

示例4

通過ydwe創(chuàng)建一個基礎地圖,這里不作贅述,詳情見示例5

示例5

通過界面上方的模塊打開觸發(fā)編輯器,見示例6

示例6

通過界面上方的模塊,有一個小寫A的按鈕,打開觸發(fā)編輯器,見示例7

示例7

刪掉原先的觸發(fā),或修改掉名稱,命名規(guī)范是一件很重要的事情。

然后寫入以下觸發(fā):

事件 - 地圖初始化

動作 -?

游戲 - 輸入作弊碼:exec-lua:lua.base

(輸入作弊碼:exec-lua:)效果等同于lua里面的require,作用是調用地圖內的lua腳本。

見示例8。

示例8


之后的lua.base,這個是我寫入口文件的個人習慣,讀者可根據(jù)喜好自行修改。

如修改成base、main等等,都毫不影響。

示例9
示例10

jass的目錄結構使用的分隔符為\\

但在lua里面,require文件使用的分隔符有所變化,以.代替\\

所以這里lua.base的意思可以理解為lua\\base.lua

即調用地圖內,lua文件夾內的base.lua文件

所有的lua腳本,結尾后綴都為.lua

如果沒有在前面加上lua.

那么就會檢索地圖內的base.lua、main.lua文件

以上就是用Trigger寫lua入口的方式。


這里再提供兩種通過jass寫lua入口的方法。

還是先刪掉所有的觸發(fā)器,然后通過w3x2lni.exe將地圖解包成目錄結構,見示例11。

示例11

找到目錄結構內的war3map.j文件,用記事本打開,見示例12。

示例12

找到函數(shù) YDTriggerSaveLoadSystem__Init,這個函數(shù)會在地圖的main入口內加載。

因此在這里添加一行代碼:call Cheat("exec-lua:lua.base)

同樣能起到和示例8一樣的效果。

示例13

除了使用記事本以外,也可以通過之前我提到的vscode來打開war3map.j文件來編輯。

同樣是找到war3map.j,然后添加:call Cheat("exec-lua:lua.base)

見示例14

示例14

不要忘記保存,而且之后的操作全部在vscode內進行。

都改好了之后,在map目錄內新建一個名稱為lua的文件夾,新建一個名稱為base的lua文件。

開始編寫代碼,詳情見示例15:

示例15

接下來將地圖目錄拖到w3x2lni內,點擊obj轉成w3x文件,注意是地圖目錄,并非地圖文件。

見示例16:

示例16

右鍵ydwe測試地圖,你會看到除了成功進入游戲之外,還會彈出一個黑色背景的窗口,這個窗口就是控制臺(cmd),詳情見示例17/18

示例17
示例18

print是一個非常重要也是使用頻率非常之高的函數(shù),他可以打印出一些消息,方便你不斷調試代碼以及進行代碼排錯。

但lua本身的print函數(shù)是無法打印中文消息的,因此你需要打印中文消息時,需要覆蓋掉print函數(shù),使用ydlua引擎內的控制臺來打印消息。

見示例19/20:

示例19
示例20

如果你沒有去覆蓋print函數(shù),那么打印出的中文就會變成亂碼,見示例21/22:

示例21
示例22

至此,所有基礎的設置都已經調好了,現(xiàn)在已經可以開始通過lua去編寫地圖了。


這里講一下有關lua作圖的一些知識點。

ydlua取消了原生lua的一些功能,即ydlua不推薦你去使用這些功能,所以它給你注釋掉了。

但這些被取消的東西并不影響你作圖,ydlua的內容完全支撐你做出一張好圖,記住這一點就好了。


require函數(shù)是用來調用其他lua腳本的。

原生lua支持你調用任何目錄內的腳本,但ydlua的范圍僅在你地圖文件內,也就是只能調用你地圖文件里的lua腳本,無法調用地圖文件外的lua腳本。

如果你想調用地圖外的lua腳本,那么你需要用到一些特殊方法,而不是直接require 目錄+文件名。


ydlua不只是可以在地圖內的腳本調用,在地圖外的腳本依然可以調用,但效果只能依靠你的地圖來運行。


想要熟練掌握lua作圖,前置條件是學會jass,你可以不精通,但你需要會寫和看懂jass。

因為require "jass.common"內是cj的所有函數(shù),如果你看不懂jass,那么你寫起來就會很費勁,所以熟練掌握lua作圖的前置條件就是jass入門。


命名規(guī)范很重要!命名規(guī)范很重要!命名規(guī)范很重要!

命名規(guī)范就是文件、變量、函數(shù)的名稱規(guī)范,很多作者在使用T作圖的時候,變量命名都很隨意,常用命名基本都是以下幾種:

從二十六英文字母表、阿拉伯數(shù)字內取其中一個當做變量名。

更有甚者喜歡用中文當做變量名。


這種命名方法都是不規(guī)范的,喜歡中文當然沒問題,但變量、函數(shù)名都是不能使用中文的。

雖然文件名可以使用中文,但我這里依然不推薦你使用中文來命名腳本、目錄。


這里有人要說了,為什么ydwe里的逆天局部變量可以使用中文來命名變量呢?

因為ydwe里的逆天局部變量從嚴格意義上來說,它并不是真正的局部變量。

而jass內的局部變量,它只能在函數(shù)塊的置頂去聲明,但逆天局部變量明顯違反了這一規(guī)則,可以在任何地方去聲明并且獲取。

而逆天局部變量的變量名稱,是一個字符串類型,字符串是可以輸入中文的。


規(guī)范的命名方法有以下幾種:

第一種、駝峰法:

這一種也是我最喜歡的命名方法,同樣也是common.j和blizzard.j里用到的命名方法,也被細分為大小兩種命名。

大駝峰法:GetUnitName(獲取單位名稱)

小駝峰法:getUnitName(獲取單位名稱)

我個人習慣以大駝峰法來給函數(shù)命名,小駝峰法給變量命名。


第二種、蛇形法:

優(yōu)點是看上去更加簡潔,而且無需切換輸入法,方便快捷。

示例:get_unit_name(獲取單位名稱)


第三種、串式法:

這種方法在jass和lua里面并不支持,只是有這么一種命名法而已,我這里提一下,不推薦大家使用,而且與蛇形法區(qū)別不大。

示例:get-unit-name


第四種、匈牙利法:

與小駝峰法類似,首字母必定是小寫,用于區(qū)分變量的類,即類+變量名,優(yōu)點是能夠明確區(qū)分出變量的類型和含義,缺點是增加了不必要的記憶負擔,因為你需要同時記憶出首字母代表的類和后面的名稱,看需求以及個人喜好使用即可。

示例:sGetUnitName(獲取單位名稱)

s代表了string這個類,GetUnitName代表了變量的意思。


了解到命名方法之后,那么變量該如何命名呢?

可讀性強的名稱優(yōu)先于簡短的名稱,盡量使用完整化的稱謂,不要圖方便就去簡寫。

見示例23:


除此之外盡可能的避免混淆,誤導,或者含糊不清的詞匯。

這也許會很困難,但堅持下去一定會有一個好的結果。

培養(yǎng)一個好的寫代碼習慣相當重要,除非你能保證永遠只有你一個人寫代碼,不會有其他人去看你的屎山代碼。


其他的等我想到再補充吧,下次聊一下函數(shù)(function)和觸發(fā)器(trigger)


潛水黨的簡單lua教程五的評論 (共 條)

分享到微博請遵守國家法律
丹棱县| 台中市| 肇庆市| 阿坝| 阳西县| 浪卡子县| 长寿区| 化德县| 闽侯县| 锡林郭勒盟| 同仁县| 三江| 灵丘县| 东安县| 宣汉县| 盘山县| 古交市| 灯塔市| 老河口市| 东乌| 大理市| 姚安县| 周宁县| 凤城市| 莫力| 丰都县| 抚州市| 宁德市| 宜章县| 靖安县| 康平县| 武定县| 乐安县| 通榆县| 剑川县| 石家庄市| 钟山县| 方正县| 双城市| 拜泉县| 梓潼县|