Skip to content

标题页和首页模块

标题页是玩家进入游戏前看到的首页。Galgo 内置默认标题页,也支持通过 Config.TitleMenu 自定义首页按钮、排序、点击动作和额外模块。

默认标题页

默认标题页包含:

  • START GAME
  • LOAD GAME
  • GALLERY
  • SETTINGS
  • EXIT

背景和音乐由 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:排序值,小的排前面。
  • XYWH:逻辑坐标和大小。为 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:绘制和点击排序。
  • XYWH:逻辑坐标和大小。
  • 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。

Released under the project license.