example 示例导览
example/main.go 是 Galgo 的功能展示。它不是最小示例,而是尽量把引擎能力串到一个可运行 demo 里。
运行
powershell
go run ./example如果只想验证编译:
powershell
go test ./...i18n
示例创建了 i18n.Translator,添加中英文语言包,并设置默认语言:
go
translator := i18n.NewTranslator()
translator.AddLanguage("zh", map[string]string{...})
translator.AddLanguage("en", map[string]string{...})
translator.SetLanguage("zh")剧情文本和 UI 文本都可以通过 key 翻译。缺失 key 时会回退到原字符串。
自定义样式
示例基于 style.DefaultUIStyle() 改色:
- 对话框背景和边框。
- 名字标签颜色。
- 强调色。
- 圆角。
- 对话框位置。
这展示了“只改样式,不改绘制逻辑”的最低成本定制方式。
渲染钩子
Config.Hooks.OnPostProcess 在示例中绘制了一圈边框:
go
OnPostProcess: func(screen *ebiten.Image) {
w, h := float32(screen.Bounds().Dx()), float32(screen.Bounds().Dy())
vector.StrokeRect(screen, 4, 4, w-8, h-8, 3, borderColor, true)
}这说明可以在默认画面完成后追加全屏效果。
标题页模块
示例使用 DefaultTitleMenuConfig() 创建标题页配置,然后添加一个 TitleModule。
模块展示:
- 自绘背景。
- 使用
Engine.DrawText绘制文字。 - 点击模块时调用
ShowToast。
示例还重排了标题页按钮,并新增 BONUS FLAG 按钮,用 galgo.Action 写变量。
设置页组件
示例创建了完整 SettingsConfig,包含四组:
- Gameplay:文字速度、变量开关、自定义组件。
- Audio:Voice、BGM、SFX 音量滑块。
- Display:全屏、分辨率、语言。
- Navigation:成就、CG 画廊、音乐画廊、返回标题。
它展示了:
- 组件排序。
- section 排序。
- slider。
- toggle。
- options。
- button。
- custom draw。
- custom click。
- visible 条件。
启动页
示例启用了启动页:
go
StartupEnabled: true,
StartupLogoText: "Galgo",
StartupSubtitle: "School Days Demo",
StartupMinFrames: 90,
LoadingText: "Loading",
LoadingMinFrames: 45,启动页之后进入标题页。
画廊和成就
示例配置了 CG、BGM 和成就:
go
GalleryCGs: []galgo.GalleryCGItem{...}
GalleryBGMs: []galgo.GalleryBGMItem{...}
Achievements: []galgo.AchievementItem{...}剧情中通过 UnlockAchievement 解锁成就。背景和 BGM 会参与画廊解锁。
输入框
开局输入玩家名:
go
galgo.Input("player_name", "What should Aria call you?",
galgo.InputDefault("Haruto"),
galgo.InputPlaceholder("Your name"),
galgo.InputMaxRunes(16),
)后续文本用 插值。
富文本和气泡
示例使用了:
[speed=6][wait=20][color=#F43F5E][size=20][shake]
也展示了 TextBubble,气泡会靠近角色立绘显示。
拖放交互
示例要求玩家把 Promise 拖到目标区域。投放成功后:
- 设置变量
promise_token_ready。 - 解锁成就
first_drag。
这是一个典型的剧情内小游戏交互。
分支和结局
示例包含两个分支:
walk_homeclub_duties
每个分支会设置 walked_together,最后通过 Callback 判断变量并跳到不同结局。
镜头、闪白和震屏
示例使用:
go
galgo.Camera(0, 40, 1.25, 40)
e.Flash(color.RGBA{255, 255, 255, 255}, 25)
e.Shake(12.0, 20)这些能力适合强调剧情瞬间。
扩展示例时的建议
如果新增一个引擎能力,建议在 example 中补一处可点击、可看到效果的演示。文档说明 API,example 验证体验,两者配合更容易发现回归。