欢迎光临散文网 会员登陆 & 注册

[FNF] 教你如何用lua做特殊箭头(PE)(非专业教学)

2023-01-15 16:53 作者:是白不是怀特  | 我要投稿

此文章根据个人经验所写,可能会部分地方不对。(第一次写这种超烂()

建议先了解lua基础在再来看此文章。

目录

  1. lua文件

  2. 编写lua

  3. 一些note的变量

  4. 一些note的funcion

 --1.lua文件--

在Psych engine文件夹中,我们的特殊箭头的lua是要放在mods/custom_notetypes文件夹里,不然我们就不能在游戏中的charting中找到你编辑的特殊箭头。

--编写lua--

那我们怎么制作特殊箭头呢?

我们先在custom_notetypes创建一个txt文件,然后把后缀改为lua。再以记事本打开。

接着,我们就可以编写特殊箭头了。

这边我就以”按了就会扣血的箭头“做模板例子。

先创建一个 名为“hurtnote.txt“的txt文件,然后把后面的”.txt“改为”.lua“,再用记事本打开此文件。然后就可以编写特殊箭头了。

--怎么让箭头拥有此效果?--

这就需要改箭头的基准数值了。使其按下“扣血”,而不是“加血”

我们通常会用 function onCreate()  ,这个function的意思是在lua启动时触发,也就是游戏一开始就会触发下面的代码块。

onCreate() 后面的括号不要省去,不然就不会正常运作。

接着,我们就要改箭头的基准数值了,

我们会用到getProperty(variable:String)函数

variable:变量

string:字串符

variable:string:字串符形式的变量

for i = 0, getProperty('unspawnNotes.length')-1 do

代码的意思是:获取谱子中所有未出现的箭头。

unspawnNotes :未生成,未出现的箭头

然后从中进行,选出我们要改的特殊箭头。

就用到noteType。

if getPropertyFromGroup('unspawnNotes', i, 'noteType') == 'hurtnote' then

代码的意思是:如果这个箭头的noteType是hurtnote,那么进行执行下一段代码。

noType:箭头种类

就选出我们的特殊箭头,那么要怎么改?

我们会用到setPropertyFromGroup(obj:String, index:Int, variable:Dynamic, value:Dynamic)函数

obj(ect):要设置的对象(字串符)

index:对象的id(整数)

variable:对象的某一变量(可变的)

value:要被设置的值(可变的)

我们要让这个箭头按下扣血,就要用到“hitHealth"这个变量,

则我们应该这样写

setPropertyFromGroup('unspawnNotes',i,‘hitHealth',-0.0475)

代码的意思是,将这类箭头按下后获得的生命值设为-0.0475,也就是按下减少0.0475的血。

hitHealth:击中时恢复的血量(num)

则箭头击中就会扣-0.0475的血量,

但是,这个箭头是“必须击中的”

我们还要把他改为“不用击打的”

这就运用到另一个变量“ignoreNote”

所以还要加上下面一条代码:

setPropertyFromGroup('unspawnNotes',i,‘ignoreNote',true)

代码的意思是;:把这类箭头改为可以忽视不按的类型

注:这个变量用的是布尔值而不是数字

ignore:可是否忽视此箭头(Bool)

这样,即使不按也不会增加miss数了。

再补上function onCreate()的end

和for循环的end

和if条件的end

这个特殊箭头就是这样写的:

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的皮肤材质,如果你想改note的皮肤材质(string)

那么请用下面这条代码

setPropertyFromGroup('unspawnNotes',i,'texture','你想更改的箭头材质名称')

注意,你的箭头材质png文件请放到Psych engine/mods/images里

获取方式:

getPropertyFromGroup('unspawnNotes',i,'texture')


hitHealth

击中的回血量(num)

setPropertyFromGroup('unspawnNotes',i,'hitHealth',你想加血的数值)

获取方式:

getPropertyFromGroup('unspawnNotes',i,'hitHealth')

missHealth

miss箭头的失血量(num)

setPropertyFromGroup('unspawnNotes',i,'missHealth',你想失血的数值)

获取方式:

getPropertyFromGroup('unspawnNotes',i,'missHealth')

ignoreNote

是否可忽视(bool)此类箭头

填true则可以忽视,填false则不能忽视

setPropertyFromGroup('unspawnNotes',i,'ignoreNote',bool)

(懒得写了,就默认上面为如何更改,下面为获取方式)

getPropertyFromGroup('unspawnNotes',i,'ignoreNote’)

noAnimation

击中是否不触发动作(bool)

填true则在击中此箭头不触发相应动作,填false则在击中此箭头会触发相应动作setPropertyFromGroup('unspawnNotes',i,'noAnimation',bool)

getPropertyFromGroup('unspawnNotes',i,'noAnimation')


noteType

箭头种类(string)

不推荐去改

getPropertyFromGroup('unspawnNotes',i,'noteType')

noteData

你箭头的data标签(?)(num)

比如你判定点的左下上右分别对应0,1,2,3

但是,对手的左下右上判定点也是0,1,2,3,

这个得用“mustPress”区分

setPropertyFromGroup('unspawnNotes',i,'noteData',num)

getPropertyFromGroup('unspawnNotes',i,'noteData')


mustPress

是否需要按下(bool)

这个和上面的ignoreNote不同

如果mustPress为false,则它属于对手的箭头

如果为true,则属于玩家的箭头。

setPropertyFromGroup('unspawnNotes',i,'mustPress',bool)

getPropertyFromGroup('unspawnNotes',i,'mustPress‘)


gfSection

是否为Gf位的箭头(bool)

改这个干吗(?

gfSection

上面那个就是他的获取方式,或者说,变量。


unspawnNotes.length

谱子中所有未生成的箭头(num)

getProperty('unspawnNotes.length')

不能改lol


multSpeed

箭头的速度倍速(num)

setPropertyFromGroup("unspawnNotes", i, "multSpeed", num)

getPropertyFromGroup("unspawnNotes", i, "multSpeed")


notes.length

谱子中已经出现在屏幕上的箭头(num)

getProperty('notes.length')

同样不能改lol


strumTime

箭头出现的时间(num)(毫秒)

getPropertyFromGroup('notes', i, 'strumTime')

不可以改lol

x

箭头的x坐标(num)

setPropertyFromGroup('notes', i, 'x',num)

getPropertyFromGroup('notes', i, 'x')


y


箭头的y坐标

setPropertyFromGroup('notes', i, 'y',num)

getPropertyFromGroup('notes', i, 'y')


angle

箭头的旋转度数(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)

在按下箭头时触发

id:被按下箭头的id(num)

direction:方向(num)  

direction == 0 left   

direction == 1 down

 direction == 2 up

 direction == 3 right

noteType:箭头类型(string)

isSustainNote:是否是长键(bool)


opponentNoteHit(id, direction, noteType, isSustainNote)

对手按到箭头时触发

括号里的同上

noteMiss(id, direction, noteType, isSustainNote)

miss一个箭头时触发

括号里的同上


--end--

[FNF] 教你如何用lua做特殊箭头(PE)(非专业教学)的评论 (共 条)

分享到微博请遵守国家法律