标题页和首页模块
标题页是玩家进入游戏前看到的首页。Galgo 内置默认标题页,也支持通过 Config.TitleMenu 自定义首页按钮、排序、点击动作和额外模块。
默认标题页
默认标题页包含:
START GAMELOAD GAMEGALLERYSETTINGSEXIT
背景和音乐由 Config 控制:
go
galgo.Config{
TitleBgImagePath: "assets/title_bg.png",
TitleBgmKey: "title",
TitleBgmPath: "assets/title.ogg",
}使用默认配置作为起点
推荐从默认配置开始改:
go
title := galgo.DefaultTitleMenuConfig()
title.Subtitle = "Episode 1"再传入:
go
galgo.Config{
TitleMenu: title,
}如果 TitleMenu.Items 为空,引擎会使用默认按钮。如果你显式设置 Items,就以你的列表为准。
自定义按钮
go
title.Items = []galgo.TitleMenuItem{
{ID: "start", Label: "START GAME", Order: 10, Action: galgo.StartGame()},
{ID: "settings", Label: "SETTINGS", Order: 20, Action: galgo.ShowScreen(galgo.MenuStateConfig)},
{ID: "exit", Label: "EXIT", Order: 30, Action: galgo.Quit()},
}字段说明:
ID:稳定标识,便于调试和后续扩展。Label:显示文本,会经过T翻译。Order:排序值,小的排前面。X、Y、W、H:逻辑坐标和大小。为 0 时使用默认位置。Action:点击动作。Visible:动态控制是否显示。Sensitive:动态控制是否可点击。Draw:自定义按钮绘制。
常用按钮动作
开始游戏:
go
Action: galgo.StartGame()打开设置页:
go
Action: galgo.ShowScreen(galgo.MenuStateConfig)打开读档页:
go
Action: galgo.ShowScreen(galgo.MenuStateLoad)打开 CG 画廊:
go
Action: galgo.ShowScreen(galgo.MenuStateCGGallery)退出:
go
Action: galgo.Quit()自定义逻辑:
go
Action: galgo.Action(func(e *galgo.Engine) {
e.SetVariable("bonus_enabled", true)
e.ShowToast("Bonus enabled")
})首页模块
首页模块适合放公告、状态、版本号、路线入口、DLC 提示等。
go
title.Modules = []galgo.TitleModule{
{
ID: "status",
Order: 10,
X: 720,
Y: 140,
W: 420,
H: 120,
Draw: func(e *galgo.Engine, screen *ebiten.Image, m galgo.TitleModule, b galgo.UIRect) bool {
vector.DrawFilledRect(screen, float32(b.X), float32(b.Y), float32(b.W), float32(b.H), color.RGBA{20, 24, 38, 190}, true)
e.DrawText(screen, "Title Module", m.X+20, m.Y+24, 18, color.White)
return true
},
HandleClick: func(e *galgo.Engine, m galgo.TitleModule, cx, cy int, b galgo.UIRect) bool {
e.ShowToast("Clicked custom module")
return true
},
},
}模块字段:
ID:模块标识。Order:绘制和点击排序。X、Y、W、H:逻辑坐标和大小。Visible:动态可见性。Draw:绘制函数。HandleClick:点击处理函数。
Draw 返回 true 表示模块自己完成绘制。模块没有默认绘制,如果不提供 Draw 就不会显示内容。
自定义按钮绘制
TitleMenuItem.Draw 可以替换单个按钮的绘制:
go
Draw: func(e *galgo.Engine, screen *ebiten.Image, item galgo.TitleMenuItem, b galgo.UIRect, hovered bool) bool {
bg := color.RGBA{15, 23, 42, 220}
if hovered {
bg = color.RGBA{56, 189, 248, 180}
}
vector.DrawFilledRect(screen, float32(b.X), float32(b.Y), float32(b.W), float32(b.H), bg, true)
e.DrawText(screen, item.Label, item.X+16, item.Y+12, 16, color.White)
return true
}如果返回 false,引擎会继续使用默认按钮绘制。
可见性和可点击状态
只在某个变量存在时显示:
go
Visible: func(e *galgo.Engine) bool {
return e.HasVar("bonus_unlocked")
}显示但禁用:
go
Sensitive: func(e *galgo.Engine) bool {
return e.IsAchievementUnlocked("true_ending")
}禁用项会使用弱化颜色,点击不会执行 action。
坐标规则
标题页模块和按钮的 X/Y/W/H 使用 1280x720 逻辑坐标。引擎会根据当前窗口自动缩放。建议以 1280x720 设计,再测试 1600x900 和 1920x1080。