[FNF] 教你如何用lua做特殊箭頭(PE)(非專(zhuān)業(yè)教學(xué))
此文章根據(jù)個(gè)人經(jīng)驗(yàn)所寫(xiě),可能會(huì)部分地方不對(duì)。(第一次寫(xiě)這種超爛()
建議先了解lua基礎(chǔ)在再來(lái)看此文章。
目錄
lua文件
編寫(xiě)lua
一些note的變量
一些note的funcion
?--1.lua文件--
在Psych engine文件夾中,我們的特殊箭頭的lua是要放在mods/custom_notetypes文件夾里,不然我們就不能在游戲中的charting中找到你編輯的特殊箭頭。
--編寫(xiě)lua--
那我們?cè)趺粗谱魈厥饧^呢?
我們先在custom_notetypes創(chuàng)建一個(gè)txt文件,然后把后綴改為lua。再以記事本打開(kāi)。
接著,我們就可以編寫(xiě)特殊箭頭了。
這邊我就以”按了就會(huì)扣血的箭頭“做模板例子。
先創(chuàng)建一個(gè) 名為“hurtnote.txt“的txt文件,然后把后面的”.txt“改為”.lua“,再用記事本打開(kāi)此文件。然后就可以編寫(xiě)特殊箭頭了。
--怎么讓箭頭擁有此效果?--
這就需要改箭頭的基準(zhǔn)數(shù)值了。使其按下“扣血”,而不是“加血”
我們通常會(huì)用 function?onCreate()? ,這個(gè)function的意思是在lua啟動(dòng)時(shí)觸發(fā),也就是游戲一開(kāi)始就會(huì)觸發(fā)下面的代碼塊。
onCreate() 后面的括號(hào)不要省去,不然就不會(huì)正常運(yùn)作。
接著,我們就要改箭頭的基準(zhǔn)數(shù)值了,
我們會(huì)用到getProperty(variable:String)函數(shù)
variable:變量
string:字串符
variable:string:字串符形式的變量
for i = 0, getProperty('unspawnNotes.length')-1 do
代碼的意思是:獲取譜子中所有未出現(xiàn)的箭頭。
unspawnNotes :未生成,未出現(xiàn)的箭頭
然后從中進(jìn)行,選出我們要改的特殊箭頭。
就用到noteType。
if getPropertyFromGroup('unspawnNotes', i, 'noteType') == 'hurtnote' then
代碼的意思是:如果這個(gè)箭頭的noteType是hurtnote,那么進(jìn)行執(zhí)行下一段代碼。
noType:箭頭種類(lèi)
就選出我們的特殊箭頭,那么要怎么改?
我們會(huì)用到setPropertyFromGroup(obj:String, index:Int, variable:Dynamic, value:Dynamic)函數(shù)
obj(ect):要設(shè)置的對(duì)象(字串符)
index:對(duì)象的id(整數(shù))
variable:對(duì)象的某一變量(可變的)
value:要被設(shè)置的值(可變的)
我們要讓這個(gè)箭頭按下扣血,就要用到“hitHealth"這個(gè)變量,
則我們應(yīng)該這樣寫(xiě)
setPropertyFromGroup('unspawnNotes',i,‘hitHealth',-0.0475)
代碼的意思是,將這類(lèi)箭頭按下后獲得的生命值設(shè)為-0.0475,也就是按下減少0.0475的血。
hitHealth:擊中時(shí)恢復(fù)的血量(num)
則箭頭擊中就會(huì)扣-0.0475的血量,
但是,這個(gè)箭頭是“必須擊中的”
我們還要把他改為“不用擊打的”
這就運(yùn)用到另一個(gè)變量“ignoreNote”
所以還要加上下面一條代碼:
setPropertyFromGroup('unspawnNotes',i,‘ignoreNote',true)
代碼的意思是;:把這類(lèi)箭頭改為可以忽視不按的類(lèi)型
注:這個(gè)變量用的是布爾值而不是數(shù)字
ignore:可是否忽視此箭頭(Bool)
這樣,即使不按也不會(huì)增加miss數(shù)了。
再補(bǔ)上function onCreate()的end
和for循環(huán)的end
和if條件的end
這個(gè)特殊箭頭就是這樣寫(xiě)的:
function?onCreate()
for i = 0,?getProperty('unspawnNotes.length')-1?do
if?getPropertyFromGroup('unspawnNotes', i, 'noteType') == 'hurtnote'?then
setPropertyFromGroup('unspawnNotes',i,'hitHealth',-0.0475)
setPropertyFromGroup('unspawnNotes',i,'ignoreNote',true)
end
end
end
--一些note的變量--
texture
note的皮膚材質(zhì),如果你想改note的皮膚材質(zhì)(string)
那么請(qǐng)用下面這條代碼
setPropertyFromGroup('unspawnNotes',i,'texture','你想更改的箭頭材質(zhì)名稱(chēng)')
注意,你的箭頭材質(zhì)png文件請(qǐng)放到Psych engine/mods/images里
獲取方式:
getPropertyFromGroup('unspawnNotes',i,'texture')
hitHealth
擊中的回血量(num)
setPropertyFromGroup('unspawnNotes',i,'hitHealth',你想加血的數(shù)值)
獲取方式:
getPropertyFromGroup('unspawnNotes',i,'hitHealth')
missHealth
miss箭頭的失血量(num)
setPropertyFromGroup('unspawnNotes',i,'missHealth',你想失血的數(shù)值)
獲取方式:
getPropertyFromGroup('unspawnNotes',i,'missHealth')
ignoreNote
是否可忽視(bool)此類(lèi)箭頭
填true則可以忽視,填false則不能忽視
setPropertyFromGroup('unspawnNotes',i,'ignoreNote',bool)
(懶得寫(xiě)了,就默認(rèn)上面為如何更改,下面為獲取方式)
getPropertyFromGroup('unspawnNotes',i,'ignoreNote’)
noAnimation
擊中是否不觸發(fā)動(dòng)作(bool)
填true則在擊中此箭頭不觸發(fā)相應(yīng)動(dòng)作,填false則在擊中此箭頭會(huì)觸發(fā)相應(yīng)動(dòng)作setPropertyFromGroup('unspawnNotes',i,'noAnimation',bool)
getPropertyFromGroup('unspawnNotes',i,'noAnimation')
noteType
箭頭種類(lèi)(string)
不推薦去改
getPropertyFromGroup('unspawnNotes',i,'noteType')
noteData
你箭頭的data標(biāo)簽(?)(num)
比如你判定點(diǎn)的左下上右分別對(duì)應(yīng)0,1,2,3
但是,對(duì)手的左下右上判定點(diǎn)也是0,1,2,3,
這個(gè)得用“mustPress”區(qū)分
setPropertyFromGroup('unspawnNotes',i,'noteData',num)
getPropertyFromGroup('unspawnNotes',i,'noteData')
mustPress
是否需要按下(bool)
這個(gè)和上面的ignoreNote不同
如果mustPress為false,則它屬于對(duì)手的箭頭
如果為true,則屬于玩家的箭頭。
setPropertyFromGroup('unspawnNotes',i,'mustPress',bool)
getPropertyFromGroup('unspawnNotes',i,'mustPress‘)
gfSection
是否為Gf位的箭頭(bool)
改這個(gè)干嗎(?
gfSection
上面那個(gè)就是他的獲取方式,或者說(shuō),變量。
unspawnNotes.length
譜子中所有未生成的箭頭(num)
getProperty('unspawnNotes.length')
不能改lol
multSpeed
箭頭的速度倍速(num)
setPropertyFromGroup("unspawnNotes", i, "multSpeed",?num)
getPropertyFromGroup("unspawnNotes", i, "multSpeed")
notes.length
譜子中已經(jīng)出現(xiàn)在屏幕上的箭頭(num)
getProperty('notes.length')
同樣不能改lol
strumTime
箭頭出現(xiàn)的時(shí)間(num)(毫秒)
getPropertyFromGroup('notes',?i, 'strumTime')
不可以改lol
x
箭頭的x坐標(biāo)(num)
setPropertyFromGroup('notes',?i, 'x',num)
getPropertyFromGroup('notes', i, 'x')
y
箭頭的y坐標(biāo)
setPropertyFromGroup('notes',?i,?'y',num)
getPropertyFromGroup('notes', i,?'y')
angle
箭頭的旋轉(zhuǎn)度數(shù)(num)
setPropertyFromGroup('notes',?i,?'angle',num)
getPropertyFromGroup('notes', i,?'angle')
alpha
箭頭的透明度(num)
setPropertyFromGroup('notes',?i,?'alpha',num)
getPropertyFromGroup('notes', i,?'alpha')
scale.x
箭頭的x大小比例(num)
setPropertyFromGroup('notes',?i,?'scale.x',num)
getPropertyFromGroup('notes', i,?'scale.x’)
scale.y
箭頭的y大小比例(num)
setPropertyFromGroup('notes', i, 'scale.y',num)
getPropertyFromGroup('notes', i, 'scale.y’)
--一些箭頭的function--
goodNoteHit(id, direction, noteType, isSustainNote)
在按下箭頭時(shí)觸發(fā)
id:被按下箭頭的id(num)
direction:方向(num) ?
direction == 0?left? ?
direction == 1 down
?direction == 2?up
?direction == 3 right
noteType:箭頭類(lèi)型(string)
isSustainNote:是否是長(zhǎng)鍵(bool)
opponentNoteHit(id, direction, noteType, isSustainNote)
對(duì)手按到箭頭時(shí)觸發(fā)
括號(hào)里的同上
noteMiss(id, direction, noteType, isSustainNote)
miss一個(gè)箭頭時(shí)觸發(fā)
括號(hào)里的同上