桜弦月華
频道主
如何在自制谱里制作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
贴吧
登录后评论
19
评论
1