Skip to content

Lua与HScript函数

开始/结束回调

onCreate()

每次脚本启动时触发,可用于创建对象、预缓存、属性设置器/获取器;有些变量 尚未创建,具体取决于启动时间。

onCreatePost()

在脚本启动后触发。HUD 元素和角色在此处创建;只会触发一次。

onDestroy()

脚本关闭时触发。


游戏回调

onStepHit()

默认情况下,每小节触发16 次。我建议在此处使用 curStep 变量,因为它将在每次拍子时被调用。

onBeatHit()

默认情况下,每小节触发4 次。我建议在此处使用 curBeat 变量,因为它将在每次拍子时被调用。

onSectionHit()

每小节最多触发1 次。我建议在此处使用 curSection 变量,因为它将在每次拍子时被调用。

onRecalculateRating()

在计算评分之前触发。建议使用 setRatingPercent() 函数设置计算时的准确度百分比,使用 setRatingName() 函数设置史诗级评分名称。

此回调可以使用 Function_Stop;如果要重新计算评分,则不得返回 Function_Stop

onMoveCamera(focus)

镜头聚焦于某个角色时触发;可以是“boyfriend”、“dad”或“gf”。

  • focus - 要检查的角色。

示例:

function onMoveCamera(focus)
    if focus == 'boyfriend' then
        -- 当该小节启用了“必须击中”小节时调用;即当镜头聚焦于男朋友时。
    elseif focus == 'dad' then
        -- 当该小节未启用“必须击中”小节时调用;即当镜头聚焦于爸爸时。
    elseif focus == 'gf' then
        -- 当该小节启用了“女朋友”小节时调用;即当镜头聚焦于女朋友时。
    end
end

更新

onUpdate(elapsed)

在游戏的每一帧之前触发。

  • elapsed - 以毫秒为单位显示的每一帧;getPropertyFromClass('flixel.FlxG', 'elapsed') 的快捷方式。

onUpdatePost(elapsed)

在游戏的每一帧触发。HUD 元素在此处更新。

  • elapsed - 以毫秒为单位显示的每一帧;getPropertyFromClass('flixel.FlxG', 'elapsed') 的快捷方式。

onUpdateScore(miss)

scoreTxt 文本更新之后触发。

  • miss - 检查玩家是否漏掉了一个箭头;返回一个 boolean 值。

preUpdateScore(miss)

scoreTxt 文本更新之前触发。

此回调可以使用 Function_Stop;如果要更新 scoreTxt 变量并调用 onUpdateScore(),则不得返回 Function_Stop

  • miss - 检查玩家是否漏掉了一个箭头;返回一个 boolean 值。

歌曲

onSongStart()

歌曲开始倒计时结束时触发。

onEndSong()

歌曲结束时触发,如果解锁了成就,则会延迟;不要与 onDestroy() 混淆。

此回调可以使用 Function_Stop;如果要结束歌曲,则不得返回 Function_Stop


倒计时回调

onStartCountdown()

倒计时开始时触发;不要与 onCountdownStarted() 混淆。

此回调可以使用 Function_Stop;如果要开始倒计时并调用 onCountdownStarted(),则不得返回 Function_Stop

onCountdownStarted()

倒计时开始后触发;箭头弹奏在此处创建。

onCountdownTick(counter)

每次倒计时触发。

  • counter - 当前倒计时数字;从 04

示例:

function onCountdownTick(counter)
     local counterArray = {'Three', 'Two', 'One', 'Go!', 'The song starts here'}
     debugPrint('Counter Num: '..counter..' | '..counterArray[counter + 1]) 
end

将打印:

Counter Num: 0 | Three
Counter Num: 1 | Two
Counter Num: 2 | One
Counter Num: 3 | Go!
Counter Num: 4 | The song starts here
Haxe 独有:

- `tick` - 当前倒计时数字(以单词表示);从 `THREE` 到 `START`。 - `counter` - 当前倒计时数字;从 `0` 到 `4`。 示例:

function onCountdownTick(counter)
     local counterArray = {'Three', 'Two', 'One', 'Go!', 'The song starts here'}
     debugPrint('Counter Num: '..counter..' | '..counterArray[counter + 1]) 
end
将打印:
Counter Num: 0 | Three
Counter Num: 1 | Two
Counter Num: 2 | One
Counter Num: 3 | Go!
Counter Num: 4 | The song starts here


事件钩子回调

onEvent(eventName, value1, value2, strumTime)

如果事件箭头播放,则触发;可用于创建事件。

  • eventName - 要使用的事件名称。
  • value1 - 事件的第一个值。
  • value2 - 事件的第二个值。
  • strumTime - 执行事件的弹奏时间。

onEventPushed(name, value1, value2, strumTime)

针对每个事件箭头触发,建议预缓存资源。

  • eventName - 要使用的事件名称。
  • value1 - 事件的第一个值。
  • value2 - 事件的第二个值。
  • strumTime - 执行事件的弹奏时间。

eventEarlyTrigger(eventName, value1, value2, strumTime)

使事件提前触发。使用 return 语句以及指定的偏移量(以毫秒为单位)

  • eventName - 要使用的事件名称。
  • value1 - 事件的第一个值。
  • value2 - 事件的第二个值。
  • strumTime - 执行事件的弹奏时间。

示例:

function eventEarlyTrigger(eventName)
     if eventName == 'Your event' then
          return 1000; -- 将提前 1 秒返回
     end
end

对话回调

onNextDialogue(dialogueCount)

如果玩家移动到下一行对话,则触发。

  • dialogueCount - 要检查的下一行对话;从 0 开始,但在到达下一行对话之前不会被实际调用。

onSkipDialogue(dialogueCount)

如果当前对话行在文本中间被跳过,则触发。

  • dialogueCount - 要检查的当前对话行;从 0 开始。

子状态回调

onPause()

如果游戏从播放状态暂停,则触发。

此回调可以使用 Function_Stop;如果要打开暂停菜单,则不得返回 Function_Stop

onResume()

如果游戏从暂停状态恢复,则触发。

onGameOver()

如果玩家因技术问题死亡,则触发。

此回调可以使用 Function_Stop;如果要让玩家能够死亡,则不得返回 Function_Stop

onGameOverStart()

游戏结束画面开始时触发。

onGameOverConfirm(retry)

如果玩家确认重试或返回菜单,则触发。

  • retry - 检查玩家是否按下了重试按钮;返回一个 boolean 值。

按键回调

箭头

!> 对于与箭头相关的回调,HScript 上的参数将替换为箭头本身;例如:note.noteType

goodNoteHit(membersIndex, noteData, noteType, isSustainNote)

玩家成功击中箭头时触发。

在此回调函数中可以使用 Function_Stop,但它目前仅用于阻止 HScript 版本的函数被调用;Lua 版本不能返回 Function_Stop,否则 HScript 版本将不会被调用。

  • membersIndex - 箭头成员 ID。
  • noteData - 箭头方向;取值:0,1,2,3,分别对应左、下、上、右。
  • noteType - 要检查的箭头类型。
  • isSustainNote - 检查箭头是否为长按箭头;返回一个 boolean 值。

goodNoteHitPre(membersIndex, noteData, noteType, isSustainNote)

计算成功击中箭头之前触发;参数与 goodNoteHit 相同。

在此回调函数中可以使用 Function_Stop,但它目前仅用于阻止 HScript 版本的函数被调用;Lua 版本不能返回 Function_Stop,否则 HScript 版本将不会被调用。

opponentNoteHit(membersIndex, noteData, noteType, isSustainNote)

对手成功击中箭头时触发;参数与 goodNoteHit 相同。

在此回调函数中可以使用 Function_Stop,但它目前仅用于阻止 HScript 版本的函数被调用;Lua 版本不能返回 Function_Stop,否则 HScript 版本将不会被调用。

opponentNoteHitPre(membersIndex, noteData, noteType, isSustainNote)

计算对手成功击中箭头之前触发;参数与 goodNoteHit 相同。

在此回调函数中可以使用 Function_Stop,但它目前仅用于阻止 HScript 版本的函数被调用;Lua 版本不能返回 Function_Stop,否则 HScript 版本将不会被调用。

onSpawnNote(membersIndex, noteData, noteType, isSustainNote, strumTime)

箭头生成时触发。

  • strumTime - 箭头的击打时间。

noteMiss(membersIndex, noteData, noteType, isSustainNote)

玩家错过箭头时触发;参数与 goodNoteHit 相同。

在此回调函数中可以使用 Function_Stop,但它目前仅用于阻止 HScript 版本的函数被调用;Lua 版本不能返回 Function_Stop,否则 HScript 版本将不会被调用。

noteMissPress(noteData)

没有箭头时玩家按下按键时触发。仅在禁用“Ghost Tapping”(幽灵点击)时才会激活。

  • noteData - 每个方向上的箭头数据;取值:0,1,2,3,分别对应左、下、上、右。

按键事件

onKeyPress(key)

当玩家按下箭头控制按钮时触发。

  • key - 按下的按键方向;取值:0,1,2,3,分别对应左、下、上、右。

onKeyPressPre(key)

计算按键按下之前触发。

在此回调函数中可以使用 Function_Stop,但不能返回 Function_Stop,否则输入系统将无法正常工作,并且 onKeyPress()onGhostTap() 也将不会被调用;除非您打算创建自己的输入系统,否则不建议在此函数中使用 Function_Stop

  • key - 按下的按键方向;取值:0,1,2,3,分别对应左、下、上、右。

onKeyRelease(key)

当玩家释放箭头控制按钮时触发。

  • key - 释放的按键方向;取值:0,1,2,3,分别对应左、下、上、右。

onKeyReleasePre(key)

计算按键释放之前触发。

在此回调函数中可以使用 Function_Stop,但不能返回 Function_Stop,否则弹奏动画将无法播放,并且 onKeyRelease() 也将不会被调用。

  • key - 释放的按键方向;取值:0,1,2,3,分别对应左、下、上、右。

onGhostTap(key)

没有箭头时按下箭头控制按钮时触发;不要与 noteMissPress() 混淆。

  • key - 按下的按键方向;取值:0,1,2,3,分别对应左、下、上、右。

完成回调

onTimerCompleted(tag, loops, loopsLeft)

计时器完成时触发;不要与 onTweenCompleted() 函数混淆。

  • tag - 要使用的计时器标签。
  • loops - 检查计时器完全结束后循环的次数。
  • loopsLeft - 检查计时器剩余的循环次数。

onTweenCompleted(tag, vars)

补间动画完成时触发。

  • tag - 要使用的补间动画标签。
  • vars - 补间动画中使用的变量;仅在调用 startTween()doTween() 函数时才会被调用。

onSoundFinished(tag)

声音播放完成时触发。

  • tag - 要使用的音频标签。

动态函数

动态函数/回调可以在 HScript 或 runHaxeCode()被覆盖,这意味着您可以改变函数的工作方式。

例:

function onCreatePost() {
     game.updateIconsPosition = function() {
          game.iconP1.x = 314;
          game.iconP2.x = 114;
          // 现在图标将更新到这些位置并保持静态,而不是根据生命值更新位置
          // 如果您不希望它执行任何操作,甚至可以将函数设置为空
     }
}

说明:

这段代码展示了如何覆盖 updateIconsPosition 函数。默认情况下,该函数会根据玩家的生命值更新图标位置。但是,通过在 onCreatePost() 函数中重新定义该函数,您可以将其更改为将图标固定在特定位置。