交互系统:输入、变量、拖放、成就与画廊
文本输入
文本输入用于取名字、口令、命名存档等场景。
go
galgo.Input("player_name", "你叫什么名字?",
galgo.InputDefault("Haruto"),
galgo.InputPlaceholder("输入名字"),
galgo.InputMaxRunes(16),
)提交后会写入变量:
go
name := engine.GetStringVar("player_name", "玩家")输入框支持中文 IME、光标移动、鼠标选区、拖选、Ctrl+A、Shift+方向键、Home/End、Backspace/Delete。
可选项:
InputDefault(value)InputPlaceholder(value)InputMaxRunes(max)InputAllowEmpty()InputSubmitLabel(label)InputValidator(fn)
校验示例:
go
galgo.Input("player_name", "输入名字",
galgo.InputValidator(func(value string) (bool, string) {
if len([]rune(value)) < 2 {
return false, "名字至少 2 个字"
}
return true, ""
}),
)变量
go
engine.SetVariable("flag", true)
value, ok := engine.GetVariable("flag")
engine.GetStringVar("player_name", "玩家")
engine.GetBoolVar("walked_together", false)
engine.GetIntVar("score", 0)
engine.GetFloatVar("affection", 0)
engine.HasVar("flag")
engine.DeleteVar("flag")文本中可插值变量:
go
galgo.Text("Aria", "{{player_name}},今天一起回家吧。")拖放组件
go
galgo.DragDrop(
[]*galgo.DragComponent{
{ID: "token", Label: "Promise", X: 500, Y: 300, W: 160, H: 48},
},
[]*galgo.DropZone{
{
ID: "target",
Label: "Drop Here",
X: 540,
Y: 430,
W: 200,
H: 70,
Accept: func(e *galgo.Engine, c *galgo.DragComponent, z *galgo.DropZone) bool {
return c.ID == "token"
},
OnDrop: func(e *galgo.Engine, c *galgo.DragComponent, z *galgo.DropZone) {
e.SetVariable("token_ready", true)
e.UnlockAchievement("first_drag")
},
},
},
)选项:
DragDropBlocking(bool)DragDropCompleteOnDrop(bool)DragDropOnComplete(fn)
组件支持自定义绘制:
go
Draw: func(e *galgo.Engine, screen *ebiten.Image, c *galgo.DragComponent, dragging bool) bool {
// 自己绘制组件
return true
}成就
先在配置中注册:
go
Achievements: []galgo.AchievementItem{
{Key: "named_player", Title: "First Name", Description: "Named the protagonist."},
{Key: "secret_route", Title: "Secret", Description: "Found the route.", Hidden: true},
},脚本中解锁:
go
galgo.UnlockAchievement("named_player")运行时:
go
engine.UnlockAchievement("named_player")
engine.IsAchievementUnlocked("named_player")如果启用了 Steamworks,UnlockAchievement 会同时尝试同步 Steam 成就。
画廊
配置 CG 和音乐:
go
GalleryCGs: []galgo.GalleryCGItem{
{Key: "classroom", Path: "assets/bg_classroom.jpg", Name: "Classroom"},
},
GalleryBGMs: []galgo.GalleryBGMItem{
{Key: "school_life", Path: "assets/bgm_school.ogg", Name: "School Life"},
},背景调用 Bg 时会自动解锁同 Key 的 CG:
go
galgo.Bg("classroom", "assets/bg_classroom.jpg")也可以手动:
go
engine.UnlockCG("classroom", "assets/bg_classroom.jpg")
engine.UnlockBGM("school_life", "assets/bgm_school.ogg")解锁状态保存到 SaveDir/gallery.json。