脚本与流程控制
Galgo 脚本由 Script -> Node -> Step 组成。每个节点包含一组按顺序执行的 Step。
go
script := galgo.NewScript()
script.AddNode("start", []galgo.Step{
galgo.Text("", "旁白文本"),
galgo.Jump("next"),
})对话
go
galgo.Text("Aria", "普通对话")
galgo.TextBubble("Aria", "气泡台词")
galgo.TextWithVoice("Aria", "带语音的对话", "voice_001", "assets/voice_001.ogg")
galgo.TextBubbleWithVoice("Aria", "带语音的气泡台词", "voice_002", "assets/voice_002.ogg")角色名和文本都会经过 ResolveText,支持翻译和变量插值。
富文本标签:
text
[color=#F43F5E]红色[/color]
[size=24]大字[/size]
[speed=6]慢速打字[/speed]
[shake]抖动[/shake]
[wait=30]
[se=click]背景、立绘和镜头
go
galgo.Bg("classroom", "assets/bg_classroom.jpg")
galgo.Sprite("Aria", "aria_happy", "assets/aria_happy.png", galgo.PosCenter)
galgo.HideSprite("Aria")
galgo.Camera(0, 40, 1.25, 40)Camera(x, y, zoom, duration) 非阻塞。duration 为 0 时立即应用。
音频
go
galgo.PlayBGM("school", "assets/bgm_school.ogg")
galgo.StopBGM()
galgo.PlaySE("click", "assets/click.wav")角色语音通常通过 TextWithVoice 或 TextBubbleWithVoice 绑定到台词。
选项和跳转
go
galgo.Choice(
galgo.ChoiceOption{Text: "一起回家", TargetID: "walk_home"},
galgo.ChoiceOption{Text: "去社团", TargetID: "club"},
)
galgo.Jump("ending")ChoiceOption.Callback 可在选择时执行 Go 逻辑。
Callback
Callback 用于嵌入任意 Go 逻辑。返回 false 表示继续执行下一步,返回 true 表示阻塞脚本。
go
galgo.Callback(func(e *galgo.Engine) bool {
e.Shake(12, 20)
e.Flash(color.RGBA{255, 255, 255, 180}, 25)
e.SetVariable("walked_together", true)
return false
})分支示例
go
galgo.Callback(func(e *galgo.Engine) bool {
if e.GetBoolVar("walked_together", false) {
e.JumpToNode("good_end")
} else {
e.JumpToNode("bad_end")
}
return false
})