Skip to content

GUI自定义 ​

本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。

学习目标 ​

  • 了解“GUI自定义”在 Ren'Py 项目中的用途。
  • 能在一个最小项目里验证本章相关语法或工作流。
  • 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。

核心语法 ​

  • gui.rpy
  • screens.rpy
  • gui.*
  • define gui
  • default gui

可运行示例 ​

text
## 强调色 / 交互色
define gui.accent_color = '#000060'          # 强调色(标题、选中)
define gui.idle_color = '#606060'            # 普通态文字
define gui.hover_color = '#3284d6'           # 悬停态文字
define gui.selected_color = '#555555'        # 选中态文字
define gui.insensitive_color = '#8888887f'   # 不可用态

## 正文与对话
define gui.text_color = '#402000'            # 正文/对话文字色
define gui.interface_text_color = '#404040'  # 界面文字色

教程正文 ​

Ren'Py 新项目自带一套完整 GUI(主菜单、对话框、存档/读档、设置等)。大多数外观改动只需修改 game/gui.rpy 里的 gui.* 变量,无需直接动样式或屏幕。深度定制再去改 screens.rpy。

1. 改动流程总览 ​

  1. 配色/字体/字号 → 改 gui.rpy 的 gui.* 变量。
  2. 图片素材(按钮、边框、背景) → 替换 game/gui/ 下对应 PNG。
  3. 布局/结构 → 改 screens.rpy 中的 screen(见第 16 章)。
  4. 改完 gui.rpy 建议完全重启游戏查看效果。

2. 分辨率与重新生成 GUI ​

  • 分辨率在 gui.rpy 顶部:gui.init(1280, 720)。
  • 想换分辨率/重置主题,用启动器的 “Change/Update GUI”(会按当前分辨率重新生成 gui 素材)。
  • 注意:重新生成会覆盖部分 gui/ 图片与 gui.rpy,先备份自定义改动。

3. 配色(颜色变量) ​

text
## 强调色 / 交互色
define gui.accent_color = '#000060'          # 强调色(标题、选中)
define gui.idle_color = '#606060'            # 普通态文字
define gui.hover_color = '#3284d6'           # 悬停态文字
define gui.selected_color = '#555555'        # 选中态文字
define gui.insensitive_color = '#8888887f'   # 不可用态

## 正文与对话
define gui.text_color = '#402000'            # 正文/对话文字色
define gui.interface_text_color = '#404040'  # 界面文字色

4. 字体与字号(中文必改) ​

text
## 字体(务必换成含 CJK 字形的字体,否则中文不显示)
define gui.text_font = "fonts/SourceHanSansSC-Regular.otf"          # 对话/正文
define gui.name_text_font = "fonts/SourceHanSansSC-Bold.otf"        # 角色名
define gui.interface_text_font = "fonts/SourceHanSansSC-Regular.otf" # 菜单/按钮

## 字号
define gui.text_size = 33            # 对话文字
define gui.name_text_size = 45       # 角色名
define gui.interface_text_size = 36  # 界面文字
define gui.label_text_size = 36
define gui.notify_text_size = 24
define gui.title_text_size = 75      # 主菜单标题

中文显示要点:把上面所有字体变量指向同一个思源黑体/思源宋体之类的 CJK 字体, 字体文件放 game/fonts/。这是中文项目最常见的第一步。

5. 对话框(textbox) ​

text
define gui.textbox_height = 278                  # 对话框高度
define gui.textbox_yalign = 1.0                  # 贴底
define gui.name_xpos = 360                       # 角色名水平位置
define gui.dialogue_xpos = 402                   # 对话文字位置
define gui.dialogue_width = 1116

替换 game/gui/textbox.png 可改对话框背景图。

6. 按钮(main_menu / choice / 普通按钮) ​

text
## 选择按钮(menu 选项)
define gui.choice_button_text_idle_color = '#888888'
define gui.choice_button_text_hover_color = '#0066cc'

## 通用按钮文字
define gui.button_text_idle_color = gui.idle_color
define gui.button_text_hover_color = gui.hover_color
define gui.button_text_selected_color = gui.accent_color

按钮底图在 game/gui/button/ 下(idle/hover 等 PNG 或 Frame 切片图)。

7. 主菜单与游戏菜单背景 ​

text
define gui.main_menu_background = "gui/main_menu.png"
define gui.game_menu_background = "gui/game_menu.png"

主菜单按钮位置/结构在 screens.rpy 的 screen main_menu() 和 navigation()。

8. 存档界面缩略图等 ​

text
define config.thumbnail_width = 256
define config.thumbnail_height = 144
define gui.slot_button_text_size = 22
define gui.file_slot_cols = 3          # 存档槽列数
define gui.file_slot_rows = 2

9. 快捷菜单(quick menu)与通知 ​

  • 底部快捷条 quick_menu(回退/自动/存档/设置)在 screens.rpy,可隐藏或改样式。
  • 通知文字(renpy.notify)样式由 gui.notify_* 控制。

10. 变体(手机/不同尺寸) ​

gui.rpy 支持按变体覆盖(如 variant "small" 给小屏更大的字号),自动适配桌面/移动端。

text
init python:
    if renpy.variant("small"):       # 小屏/手机
        gui.text_size = 30
        gui.interface_text_size = 45

常见坑 ​

  • 中文不显示 = 没把 gui.*_font 全换成 CJK 字体;这是头号坑。
  • 改 gui.rpy 后请完整重启游戏,热重载有时不刷新 GUI。
  • 用启动器“重新生成 GUI”前务必备份,会覆盖自定义文件。
  • 想改“结构/位置”要去 screens.rpy,gui.* 只管“数值/外观参数”。

官方参考 ​

在 GenPy 里怎么做 ​

  • 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
  • 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
  • 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。

推荐继续阅读:

Built for GenPy creators.