【系列】潛水黨的簡單lua教程一
原本打算在貼吧發(fā)的,但帖子發(fā)出去就被刪了,原因我也不清楚,最后還是決定在b站發(fā)一下,還是希望可以幫助那些有興趣的新人來入坑lua作圖。
其實貼吧里也有不少lua作圖的教程了,包括ydwe的官博也有l(wèi)ua的入門教程。
但實際上我在當(dāng)初看這些內(nèi)容的時候也是一知半解,完全不知道從什么地方下手。
本人潛水多年,當(dāng)初在小白階段也從貼吧學(xué)到了許多知識,因此想著有機會回報一下米娜桑。
帖子的內(nèi)容也基本都是個人理解,如有錯誤可以指正。
?
關(guān)于lua作圖的一些基本知識,這些也都有許多人講過,可以在吧內(nèi)搜索lua關(guān)鍵詞找到相關(guān)帖子,這里我不再重復(fù)。
?
最萌小汐提供的lua作圖教程鏈接:https://tieba.baidu.com/p/2878085567?pn=1
此教程僅提供了如何使用編輯器來進行l(wèi)ua代碼的編寫。
?
這里我便提供如何在其他工具中寫好lua腳本,然后導(dǎo)入地圖的方法。
?
能夠編寫腳本的工具有很多,這里我只推薦三個工具:
記事本:這個基本大家的電腦內(nèi)都會自帶的。
Notepad++:支持多開文本,批量替換字符等等功能,我經(jīng)常用于編輯單個文件。
Vs code:主要的代碼編輯器,個人看法是notepad++的上位替代品,相對于notepad++來說要復(fù)雜一些。
?
長話短說,之后就是vs code的作圖環(huán)境配置了。
首先是中文化界面方法:https://jingyan.baidu.com/article/64d05a023e7a479f54f73b03.html
其次是學(xué)會如何安裝插件:https://jingyan.baidu.com/article/cdddd41caac56512ca00e113.html
?
上面兩篇教程看完之后,就需要安裝以下兩個插件:


還有兩個可選插件建議安裝:


這兩個其實也不是可選吧,我個人覺得其實是必選插件。
至少安裝完了之后寫代碼確實很方便。
?
作圖環(huán)境配置完成之后,就可以開始作圖了。
?
然后這里提一下w3x2lni這個工具。
當(dāng)你通過編輯器新建一張w3x地圖文件之后,便可以用w3x2lni工具來將地圖文件進行解包/優(yōu)化/打包。
可以通過官博的下載頁面來下載w3x2lni這個工具。
使用方法也很簡單:
將w3x文件拖進去,點擊第一個lni按鈕就可以將地圖文件解壓成一個新的目錄文件夾。
將目錄文件夾拖進去,點擊第三個obj按鈕就可以將文件夾打包成w3x地圖文件。
非常的快捷方便。
?
Ydwe官博:http://www.ydwe.net/
以上內(nèi)容全部了解完畢之后,便是我踩過的一些坑,用于提醒還未了解的新人。
英萌下載鏈接:https://github.com/actboy168/MoeHero
打不開看這:https://pan.baidu.com/s/1wgD_gNGjzPinZMfD_3CfVg
提取碼:ec4e
?
首先,新人不要去嘗試看英萌的代碼,英萌本身的門檻是很高的。
尤其是英萌的代碼里并沒有寫很多注釋。
如果你只是新手,然后想要通過學(xué)習(xí)英萌里面的東西,來提高自己對于lua作圖的理解。
那這其中困難程度不亞于讓你以小學(xué)三年級的水平去解大學(xué)的方程式。
我不否認有的人就是天賦異稟,理解能力高超,自學(xué)三天不到就成為巨佬。
但你怎么肯定,那個人就是你呢?
當(dāng)然了,這里并不是說讓你們不要去看。
而是說,等你以后技術(shù)進步了,再回過頭去看英萌,這樣才能讓你有更多的收獲。
與其去看你們根本無法理解的英萌,不如先了解一下lua這個輕量化的腳本語言如何?
?
首先是變量使用規(guī)則:
1、可以包含字母、數(shù)字、下劃線,但不能以數(shù)字開頭。
?
例:
a1 = 1
1a = 1
-- 其中 1a會報錯,并且無法成功賦值。
?
2、變量名區(qū)分大小寫,即x與X是完全不同的兩個變量。
?
例:
x = 1
X = 2
print(x, X) -- 輸出結(jié)果:1, 2
?
3、變量名的長度沒有任何限制。
?
例:
abcdefghijklmnopqrstuvwxyz = 1
print(abcdefghijklmnopqrstuvwxyz) -- 輸入結(jié)果:1
?
?
4、變量不需要去聲明類型,jass里需要以類型+名稱的方式來聲明。
?
例:
// integer是jass里的整數(shù)類型
Jass:integer num = 1?
-- 無需類型即可直接聲明
Lua:num = 1?
?
5、變量可以在任何地方聲明且賦值。
lua的變量想在哪里寫就在哪里寫,而jass不同。
?jass里全局變量需要在globals范圍內(nèi)聲明,局部變量必須在函數(shù)內(nèi)頂部聲明。
例:
全局變量:
globals
integer num
endglobals
局部變量:
function init takes nothing returns nothing
?// 必須在函數(shù)內(nèi)先置頂聲明,否則報錯無法運行
local integer num
num = 1 // 再賦值
endfunction
?
6、全局變量可以不用聲明便可以直接使用,但會直接返還為nil。
?
例:
print(num) -- 輸出結(jié)果:nil
?
nil等于jass里的null,等于觸發(fā)器里的沒有單位、沒有技能、沒有XX。
也可以理解為空。
?
7、變量可以被重新聲明為新的類型。
?
例:
local num = 1
print(num) -- 輸出結(jié)果:1
?
local num = ‘王大錘’
print(num) -- 輸出結(jié)果:王大錘
但這樣反復(fù)的重新聲明為新的類型,在地圖代碼逐漸增多之后,會導(dǎo)致你根本記不清當(dāng)前變量到底是什么類型,所以盡可能的避免且少用重新聲明。
?
同時lua里面提供了一個type函數(shù),它的作用是將變量的類型轉(zhuǎn)換為字符串
?
例:
num = 1
print(type(num)) -- 輸出結(jié)果:number (類型:數(shù))
-- 在lua里面,沒有整數(shù)(integer)和實數(shù)(real)的概念,整數(shù)和實數(shù)統(tǒng)稱為數(shù),即number
?
num = ‘王大錘’
print(type(num)) -- 輸出結(jié)果:string(類型:字符串)
8、應(yīng)當(dāng)盡可能的避免使用全局變量,改用局部變量
頻繁使用全局變量,亦有可能會導(dǎo)致命名沖突的問題,且lua的變量命名無需填寫類型,更是加大了這種錯誤產(chǎn)生的概率。
直接編寫代碼與觸發(fā)器的區(qū)別就在于,代碼的容錯率很低。
9、局部變量的一些解釋
ydwe里提供的逆天局部變量,嚴格來說并不能算真正意義上的局部變量,當(dāng)然這個說法也不一定對,只是我個人的一些淺薄理解。
總之如果之前習(xí)慣了用逆天局部變量的人,一定要改變一些使用習(xí)慣。
原本的ydwe里面,逆天局部變量可以做到:
if (條件為真) then
loc_a = 觸發(fā)單位
else
loc_a = 技能目標(biāo)
end
(這里的示例是隨便寫的,大概是這么個意思。)
這個時候你輸出 loc_a 會得到 (觸發(fā)單位 or 技能目標(biāo)?)任意其一
但如果你在lua里面寫:
if (true)then
local a = 觸發(fā)單位
else
local a = 技能目標(biāo)
end
這個時候你輸出 a 只會得到(nil),即空。
正確的寫法如下:
local a = 技能目標(biāo)
if (true) then
a = 觸發(fā)單位
end
這樣你就能得到 (觸發(fā)單位 or 技能目標(biāo)?)任意其一
因為你在if條件里面定義的局部變量,在外面是獲取不到的,你只能先聲明,再定義。
今天就先更這些,其他的暫時沒想到,等下次更新再補上。