go-game-dev

Go 游戏开发专家 (Go Game Development Expert)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "go-game-dev" with this command: npx skills add halflifezyf2680/mpm-vibe-coding/halflifezyf2680-mpm-vibe-coding-go-game-dev

Go 游戏开发专家 (Go Game Development Expert)

本技能为独立游戏开发者提供了一套使用 Go 语言构建专业级游戏的标准化工程流和深度决策模型。

✅ DOS (必须做的事)

  • 热路径零分配 (Zero Allocation):

  • 必须在 Update() 和 Draw() 循环复用切片(slice = slice[:0] )和对象池(sync.Pool 或泛型 Pool),确保每帧 GC 压力为零。

  • 主线程封印 (Main Thread Binding):

  • 所有的绘图逻辑(DrawImage , NewImage )必须严格限制在 Game.Draw() 主回调中执行,以确保运行在 OS 主线程。

  • 并发安全 (Concurrency Safety):

  • 在 Goroutine 中处理 AI 或物理运算时,必须通过 Channel 回传结果到主循环,或者对共享状态加 sync.RWMutex 锁。

  • 显存手动管理 (Manual VRAM Disposal):

  • 任何动态创建的 ebiten.Image (非嵌入资源),必须在使用完毕后显式调用 .Dispose() ,不得依赖 GC。

❌ DON'TS (绝对禁止的事)

  • 🚫 禁止在循环中创建对象:

  • 严禁在 Update 中使用 fmt.Sprintf (隐式接口转换)、make([]int) 或 &Vector{} 。

  • 🚫 禁止跨线程渲染:

  • 绝不要在自己启动的 go func() 中调用任何图形 API。这会导致随机崩溃或 invalid memory address 。

  • 🚫 禁止并发读写 Map:

  • 严禁在未加锁的情况下从多个 Goroutine 访问同一个 map 。Go 的 Map 竞态检测会直接 Panic 整个进程。

  • 🚫 禁止 CGO 频繁交互:

  • 避免在 Update 循环中高频调用微小的 C 函数(如 Raylib 的单点绘图)。必须在 Go 侧批处理数据,一次性传递给 C 侧。

Workflows

Phase 1: 标准化工程脚手架 (Project Scaffolding)

切勿将所有代码塞进 main.go 。请遵循 Go 标准项目布局。

  • 目录结构:

  • cmd/game/main.go : 程序入口,仅负责初始化窗口和启动 Game Loop。

  • internal/game/ : 核心逻辑,对外部不可见。

  • internal/assets/ : 嵌入式文件系统 (embed.FS ) 的对接口。

  • internal/ecs/ : (可选) 存放 Component 和 System 定义。

  • 动作:

  • go mod init <module>

  • 创建 internal/game/game.go 并定义 Game 结构体。

  • 在 cmd/game/main.go 中调用 ebiten.RunGame(&game.Game{}) 。

Phase 2: 场景管理状态机 (Scene Manager FSM)

游戏不是一个大循环,而是一系列场景的切换(Logo -> Menu -> Play -> Over)。

  • 模式:

  • 定义 Scene 接口:必须包含 Update() error 和 Draw(screen *ebiten.Image) 。

  • 在 Game 结构体中持有 currentScene Scene 。

  • 动作:

  • 实现 SceneManager ,提供 SwitchTo(Scene) 方法。

  • 确保 Game.Update() 只是一层代理:return g.currentScene.Update() 。

  • 实现第一个 TitleScene 并挂载。

Phase 3: 数据导向实体设计 (Data-Oriented Entity Design)

随着实体数量增加,OOP 继承树会成为性能瓶颈。

  • 策略:

  • 少量实体 (<500): 使用 组合模式 (Composition)。定义 GameObject 结构体,内嵌 *Sprite 和 *Position 。

  • 海量实体 (>1000): 必须上 ECS (Entity Component System)。推荐使用 donburi 或 arche 库。

  • 动作:

  • 定义 Component 接口或结构体数据。

  • 实现 System (如 MovementSystem ),只遍历拥有 Velocity 组件的实体。

Phase 4: 输入与资源抽象 (Input & Asset Abstraction)

不要直接在逻辑代码里写 ebiten.IsKeyPressed(ebiten.KeySpace) 。

  • 输入映射 (Input Mapping):

  • 创建 InputSystem ,将物理按键(Space, A, GamepadA)映射为逻辑意图(ActionJump , ActionShoot )。

  • 逻辑层只判断 input.IsActionJustPressed(ActionJump) 。

  • 资源池化:

  • 建立全局(或场景级)AssetLoader 。

  • 使用 sync.Map 或普通 map 缓存加载过的图片,避免重复 I/O。

Phase 5: 构建自动化 (Build Automation)

本地能跑不代表能发给玩家。

  • 动作:

  • 配置 .air.toml 实现代码热重载(虽然对图形窗口支持有限,但对逻辑调试有用)。

  • 编写 Makefile 或 scripts/build.py ,固化构建参数:

  • Windows: GOOS=windows GOARCH=amd64 go build -ldflags="-H windowsgui -s -w"

  • Web: GOOS=js GOARCH=wasm go build -o game.wasm

Bundled Resources

  • References:

  • references/ebitengine_patterns.md : Ebitengine 深度设计模式、性能陷阱与优化建议。

  • references/vfx_guide.md : 视觉特效指南 (Screen Shake, Shaders, Particles)。

  • references/publishing.md : Steam, Itch.io 及移动端商店的官方发布规则、编译参数与审核指南。

  • references/genre_cardgame.md : 卡牌游戏工程化指南 (手牌算法, 数据结构, 状态机)。

  • references/genre_simulation.md : 模拟经营架构通识 (区块网格, 资源流图, 确定性 Tick)。

  • Scripts:

  • scripts/build_all.py : 一键式多平台交叉编译自动化工具(支持 Wasm, Windows, Linux, macOS)。

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

docx

No summary provided by upstream source.

Repository SourceNeeds Review
General

swe-bench

No summary provided by upstream source.

Repository SourceNeeds Review
General

doc-coauthoring

No summary provided by upstream source.

Repository SourceNeeds Review