script - 26F-Studio/Quatrack GitHub Wiki
Quatrack谱面脚本编写教程
Quatrack的谱面使用lua脚本编写,文件后缀也是lua
Hello world
function drawFront()
gc.print("Hello world!",0,0)
end
这就是Quatrack谱面脚本的Hello world了,只定义一个前景绘制事件
在qbp文件的元数据$script=...
一栏写上这个文件的名字然后进入谱面,你就可以看到屏幕左上角出现了"Hello world!"的文本了
脚本工作原理
在打开谱面进入游戏的瞬间,你的脚本文件整个会执行一次,告诉游戏各种时候要做些什么,比如轨道和音符之前要先画啥,好了后再要画啥
所有事件列表
init()
,初始化,在执行完整个文件后会执行一下这个事件(大多数时候没必要,只是似乎是个规范所以我做一个放这里)
drawFront()
,前景绘制,每绘制帧绘制所有东西后再执行一些绘制命令,叠在最上面,会挡住其他所有的东西
drawBack()
,背景绘制,每绘制帧绘制其他东西前就执行一些绘制命令,在最下层作为背景,不会挡住其他东西
update(dt)
,更新,每更新帧执行一次,注意,绘制和更新并不是一个一次轮流执行的,跟玩家设置的更新帧率有关,所以请好好利用那个传进来的dt~
trackPress(id)
,轨道按下,id是按下的轨道的id,每当轨道被按下(包括ai自动按和玩家空按)的时候触发,注意,仅在键被按下时触发一次
trackRelease(id)
,轨道松开,跟轨道按下一样,在轨道松开的时候触发一次
所有能访问的函数与变量
lua基础函数
-- 基础lua函数/库,菜鸟教程看看就行
print();
assert();error();
tonumber();tostring();
select();
next();
ipairs();pairs();
type();
pcall();xpcall();
rawget();rawset();rawlen();rawequal();
setfenv();setmetatable();
math.xxx();
string.xxx();
table.xxx();
bit.xxx();
coroutine.xxx();
游戏变量
游戏数据都装在game这个表里,要啥拿啥就行 警告,这个表经过特殊处理,内部所有信息均为只读,尝试去修改是没有意义而且没有效果的!
game.needSaveSetting
game.autoPlay
game.playSongTime
game.songLength
game.playSpeed
game.hitLV
game.hitTextTime
game.safeAreaTimer
game.time
game.isSongPlaying
game.hitOffests
game.curAcc
game.fullAcc
game.accText
game.combo
game.maxCombo
game.score
game.score0
game.hitCount
game.totalDeviateTime
game.bestChain
game.map-- 临时提供,之后会删,内部很复杂,不懂不要碰!
game.hits-- 临时提供,之后会删,内部很复杂,不懂不要碰!
用户设置
玩家设置装在setting里,跟game一样,不要尝试去修改它们!
-- 都是英文单词,应该看得懂,变量类型和范围根据设置里的功能自己猜,懒得一个个说明了(有问题来群里问我)
setting.clickFX
setting.powerInfo
setting.cleanCanvas
setting.fullscreen
setting.maxFPS
setting.updRate
setting.drawRate
setting.sysCursor
setting.locale
setting.slowUnfocus
setting.bgAlpha
setting.musicDelay
setting.dropSpeed
setting.noteThick
setting.chordAlpha
setting.holdAlpha
setting.holdWidth
setting.scaleX
setting.trackW
setting.safeX
setting.safeY
setting.showHitLV
setting.dvtCount
setting.autoMute
setting.mainVol
setting.sfx
setting.sfx_spawn
setting.sfx_warn
setting.bgm
setting.stereo
setting.vib
setting.voc
其他比较高级的函数们
message(message,time);-- 在屏幕左上角弹出一条系统消息,time为消息显示的秒数,不写默认3
-- 这三个是我写的类似lua基础函数的数学/字符串/表扩展库,里面有很多相对高级的常用函数,这里不作详细介绍了,建议去看源码,写了注释应该比较好懂
MATH.xxx;
STRING.xxx;
TABLE.xxx;
-- 这是我挑选的一些你可能需要的绘制用函数,这里写出了输入参数,看函数名就知道功能和用法了
gc.setColor=function(r,g,b,a);
gc.setLineWidth=function(w);
gc.setFont=function(f);
gc.line=function(...);
gc.rectangle=function(mode,x,y,w,h);
gc.circle=function(mode,x,y,r);
gc.polygon=function(mode,x,y,r,sides,phase);
gc.print=function(text,x,y,mode);
其他说明
1.绘图的时候,电脑上默认的窗口尺寸左上角是(0,0),右下角是(1280,720) 窗口拉伸后这个“标准矩形”会变成屏幕正中间能容得下的最大的1280:720矩形,两边或者上下会被留空,看到外面的负数坐标什么的,之后可能会调整调整遮挡掉防止不方便与不公平
2.如果脚本初始化的时候发生了错误,就会弹出一个错误然后直接丢弃掉不再执行了
3.如果游戏中途出现了错误,会弹出错误提醒然后在右下角出现错误计数,考虑到每帧执行容易报错刷屏,所以每秒钟至多弹出一个报错提示(不排除两个不同的错误先后发生导致消息被吃,之后再改改)