go-game-dev
4
总安装量
3
周安装量
#54264
全站排名
安装命令
npx skills add https://github.com/halflifezyf2680/mpm-vibe-coding --skill go-game-dev
Agent 安装分布
mcpjam
3
gemini-cli
3
claude-code
3
junie
3
windsurf
3
zencoder
3
Skill 文档
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éã
- å¨ Goroutine ä¸å¤ç AI æç©çè¿ç®æ¶ï¼å¿
é¡»éè¿
- æ¾åæå¨ç®¡ç (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 æ´ä¸ªè¿ç¨ã
- 严ç¦å¨æªå éçæ
åµä¸ä»å¤ä¸ª Goroutine 访é®åä¸ä¸ª
- ð« ç¦æ¢ 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åºã
- å°éå®ä½ (<500): ä½¿ç¨ ç»åæ¨¡å¼ (Composition)ãå®ä¹
- å¨ä½:
- å®ä¹
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
- Windows:
- é
ç½®
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ï¼ã