Skip to content

富文本、变量和文本流程

Galgo 的文本系统支持翻译 key、变量插值和简单富文本标记。它们会在 Step 执行时通过 ResolveText 处理。

翻译 key

配置翻译器:

go
translator := i18n.NewTranslator()
translator.AddLanguage("en", map[string]string{
    "aria_greet": "Hey, I was looking for you.",
})
translator.AddLanguage("zh", map[string]string{
    "aria_greet": "嘿,我一直在找你。",
})
translator.SetLanguage("zh")

在脚本中使用 key:

go
galgo.Text("Aria", "aria_greet")

如果当前语言没有对应 key,Galgo 会返回原字符串。因此也可以混用 key 和直接文本。

变量插值

设置变量:

go
galgo.SetVariable("player_name", "Haruto")

在文本中插值:

go
galgo.Text("Aria", "你好,{{player_name}}。")

变量也可以由输入框写入:

go
galgo.Input("player_name", "你叫什么名字?",
    galgo.InputDefault("Haruto"),
    galgo.InputMaxRunes(16),
)

读取变量:

go
name := engine.GetStringVar("player_name", "Player")
walked := engine.GetBoolVar("walked_together", false)
score := engine.GetIntVar("score", 0)

常用变量 API:

  • SetVariable(key, value):设置变量。
  • GetVariable(key):返回 (value, ok)
  • GetVar(key):直接返回变量值,不存在时为 nil
  • HasVar(key):变量是否存在。
  • DeleteVar(key):删除变量。
  • GetStringVarGetBoolVarGetIntVarGetFloatVar:带 fallback 的类型读取。

富文本标记

富文本标记在 ParseRichText 中解析。常用标记:

text
[color=#F43F5E]红色文字[/color]
[color=pink]粉色文字[/color]
[size=22]大字号[/size]
[speed=6]更慢的打字速度[/speed]
[wait=20]
[shake]抖动文字[/shake]
[se=click]

示例:

go
galgo.Text("Aria", "[speed=6]等等![/speed][wait=20]你是不是[color=#F43F5E][shake]忘了[/shake][/color]什么?")

注意:富文本主要影响文本绘制和打字机节奏。复杂排版、图片内嵌、按钮内嵌文本等不属于当前富文本系统。

打字机速度

Config.TypewriterSpeed 控制默认打字速度。数值越小越快。

go
galgo.Config{
    TypewriterSpeed: 2,
}

设置页中的 TextSpeedValue 会把速度映射为 0 到 1 的滑块值。它内部仍然写回 Config.TypewriterSpeed

历史记录和回滚

玩家点击推进一段对话后,当前纯文本会加入历史记录。富文本标记会通过 CleanRichText 清理,历史页显示的是更适合阅读的文本。

对话和输入会推入回滚状态。玩家在历史页点击过去的记录时,Galgo 会尝试恢复到对应状态。如果无法回到更早状态,会显示提示。

文本流程建议

建议使用翻译 key 管理剧情文本,尤其是中英文双语或后续需要校对的项目。直接写中文当然可行,但当剧情量变大后,翻译 key 更容易批量替换和检查。

变量名建议稳定且语义明确,例如:

  • player_name
  • walked_together
  • aria_affection
  • promise_token_ready

避免把显示文本作为变量名,也避免用过短的变量名,例如 aflag1

Released under the project license.