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.如果游戏中途出现了错误,会弹出错误提醒然后在右下角出现错误计数,考虑到每帧执行容易报错刷屏,所以每秒钟至多弹出一个报错提示(不排除两个不同的错误先后发生导致消息被吃,之后再改改)