谢夏戈 @ xiexiage.com

XGGame-Snake 游戏开发笔记

Sep 1

XGGame-Snake

Hi~ o( ̄▽ ̄)ブ

这是第二篇 Godot 开发笔记:一个贪吃蛇。做完小鸟之后我最想补的不是玩法,是外壳——设置菜单、暂停、手柄、Theme,这些每个游戏都要、上一次都是凑合过去的东西。所以贪吃蛇玩法本身很小,笔记的重心在"为什么这么做"。

项目已开源:GitHub XGGame-Snake,欢迎 Star ⭐ 在线试玩:itch.io

和小鸟那篇不一样:小鸟记的是"怎么做出来",这篇每一步都先回答"为什么先做这个"。我还是新手,方法不一定最佳,仅供参考和交流~

这条蛇和普通贪吃蛇有什么不同

  • 食物按时间长出来(场上最多 3 个),吃掉不立刻补——你得规划路线,不是追着一个点跑
  • 每 12 秒出现一颗星星,会发光,5 秒不吃就消失,值 2 分
  • 开局可选撞墙 / 穿墙
  • 越吃越快,有下限
  • 全程不用鼠标:键盘和手柄同一套动作名,每个面板都会把焦点交给手柄

目录

  1. 立项:先写"不做什么" — 立项表、食物规则、实体清单为什么能推出"不需要物理引擎"
  2. 项目设置:分辨率、按键、骨架 — 1920×1080 和每格 20 像素的关系、键盘手柄一起绑、Autoload 骨架、目录
  3. 白块原型 ①:蛇是一个数组Vector2i 数组、插头删尾、next_direction 为什么要分开
  4. 白块原型 ②:画面是数据的镜子redraw()、方向控制、三种碰撞、随机空格
  5. 定时生成与过期 — 四个 Timer 各管一件事、哨兵值、星星的寿命
  6. 系统层:喇叭、裁判、档案柜 — EventBus / GameManager / SaveManager,蛇为什么只喊一声
  7. 设置菜单:菜单怎么把选择交给游戏 — 单一数据源、常量什么时候该变成变量、一行 posmod 实现穿墙
  8. 暂停与结算:process_mode 的坑 — 暂停会冻住暂停菜单本身、_unhandled_input 的三站、重开前先解冻
  9. 手柄:从"能移焦点"到"能按下去" — Godot 4 默认 ui_accept 没有手柄键、焦点三条规矩、嵌入窗口的输入开关
  10. UI:皮、总表、左右选 — StyleBoxFlat、按钮的 11 个槽、Theme 与类型变体、自己封装一个 ◀ 值 ▶ 组件
  11. 图标、启动画面与音效 — 16 像素图标怎么画、index.png 其实是启动画面、字体协议和 CREDITS
  12. 导出、上架与复盘build/ + .gdignore、pck 自检、itch、开源文件、这次踩的坑
2023-PRESENT © 谢夏戈