如何在自制谱里制作Luaapi
 
提前叠甲,本人在大学时期念的是文科,对代码方面毫无认知,如有说错的地方,那是很正常的。此帖子仅作抛砖引玉,很多地方都是想到什么写什么,如果你有什么想实现的lua,可以自己根据本帖子的教程动脑来写。 
 
 
 
 
首先,lua好像是一门代码语言,使用起来比较符合人类逻辑,不过需要有一点点英语基础。然后,根据我这段时间的使用下来,我觉得在自制谱里加lua更像是在做数学/物理题,简而言之就是,根据问题写公式。 
 
 
例如: 
问:(1)我想让按键的相对流速变为0.5。 
思考过程:去参考文献的LuaAPI (クラスと関数)里找到设置流速相关的公式。 
答:GAMESTATE:SetSpeed(0.5) 
 
 
可是在lua里只有这样是不够的,直接打开会报错,还得加个时机。 
 
 
例如: 
问:(2)我想让按键的相对流速在谱面开始时变为0.5。 
思考过程:去参考文献的イベント関数里找到时机相关的公式。 
答:function start() 
GAMESTATE:SetSpeed(0.5) 
end 
 
 
恭喜你,已经掌握了luaapi的基础用法了。但是只是这样肯定不能满足你的大部分需求。因为不是所有的参数我们都是已知的,那我们就需要引入未知数,或者说代数,而参考文献里有出现过=的基本都是代数相关。 
 
 
例如: 
问:(3)我想让按键的绝对流速在谱面开始时变为0.5。 
思考过程:依然是去找公式,但是没有找到另一个和流速有关的公式,那就要好好想想绝对流速和相对流速的区别了。 
经过谱面测试你会发现,GAMESTATE:SetSpeed设置的流速会随着模拟器的流速改变而改变,比如当模拟器是5速时,GAMESTATE:SetSpeed(0.5)会让流速变为5*0.5=2.5,当模拟器是10速时,GAMESTATE:SetSpeed(0.5)会让流速变为10*0.5=5,当模拟器是x速时,GAMESTATE:SetSpeed(0.5)会让流速变为x*0.5。 
那么显然,想调整绝对流速的话,我们需要把模拟器流速的影响给去掉。 
所以我们需要在当模拟器是5速时,GAMESTATE:SetSpeed(0.5/5)会让流速变为5*0.5/5=0.5,当模拟器是10速时,GAMESTATE:SetSpeed(0.5/10)会让流速变为10*0.5/10=0.5,当模拟器是x速时,GAMESTATE:SetSpeed(0.5/x)会让流速变为x*0.5/x=0.5/x。 
到这里我们就找到答案了,我们需要的是GAMESTATE:SetSpeed(0.5/x)。在文献里我们可以找到local speed = PLAYERSTATS:GetNoteSpeedOption()。换成简单的说法就是解:设模拟器的流速是speed。 
整理一下我们就可以得到答案。 
答:function start() 
local speed = PLAYERSTATS:GetNoteSpeedOption() 
GAMESTATE:SetSpeed(0.5/speed) 
end 
 
 
恭喜你,已经掌握了luaapi的全部用法了。那么下一步就是 
(4)你还能提出什么数学问题并解答? 
2025-02-12
浏览8170
贴吧
登录后评论
评论
1