SKILL.md
readonlyread-only
name
game-engine
description
專家技能,用於使用 HTML5、Canvas、WebGL 和 JavaScript 建立網頁遊戲引擎與遊戲。當需要建立遊戲、建構遊戲引擎、實作遊戲物理、處理碰撞偵測、設定遊戲迴圈、管理精靈、加入遊戲控制或處理 2D/3D 渲染時使用。涵蓋平台遊戲、打磚塊風格遊戲、迷宮遊戲、圖塊地圖、音訊、透過 WebRTC 實現多人連線以及遊戲發布等技術。
遊戲引擎技能
使用 HTML5 Canvas、WebGL 和 JavaScript 建立網頁遊戲與遊戲引擎。此技能包含入門範本、參考文件以及 2D 和 3D 遊戲開發的逐步工作流程,並可搭配 Phaser、Three.js、Babylon.js 和 A-Frame 等框架。
何時使用此技能
- 從頭開始使用網頁技術建立遊戲引擎或遊戲
- 實作遊戲迴圈、物理、碰撞偵測或渲染
- 使用 HTML5 Canvas、WebGL 或 SVG 處理遊戲圖形
- 加入遊戲控制(鍵盤、滑鼠、觸控、遊戲手把)
- 建立 2D 平台遊戲、打磚塊風格遊戲、迷宮遊戲或 3D 體驗
- 處理圖塊地圖、精靈或動畫
- 為網頁遊戲加入音訊
- 使用 WebRTC 或 WebSockets 實作多人連線功能
- 最佳化遊戲效能
- 發布與散佈網頁遊戲
前置需求
- 具備 HTML、CSS 和 JavaScript 基本知識
- 支援 Canvas/WebGL 的現代網頁瀏覽器
- 文字編輯器或 IDE
- 可選:Node.js 用於建置工具和本機開發伺服器
核心概念
以下概念構成每個網頁遊戲引擎的基礎。
遊戲迴圈
每個遊戲引擎都圍繞著遊戲迴圈——一個連續的循環:
- 處理輸入 - 讀取鍵盤、滑鼠、觸控或遊戲手把輸入
- 更新狀態 - 更新遊戲物件位置、物理、AI 和邏輯
- 渲染 - 將當前遊戲狀態繪製到螢幕上
使用 requestAnimationFrame 實現流暢且經瀏覽器最佳化的渲染。
渲染
- Canvas 2D - 最適合 2D 遊戲、基於精靈的渲染和圖塊地圖
- WebGL - 硬體加速的 3D 和進階 2D 渲染
- SVG - 向量圖形,適合 UI 元素
- CSS - 適用於基於 DOM 的遊戲元素和轉場效果
物理與碰撞偵測
- 2D 碰撞偵測 - AABB、圓形和 SAT 碰撞
- 3D 碰撞偵測 - 邊界盒、邊界球和光線投射
- 速度與加速度 - 基本的牛頓物理用於移動
- 重力 - 平台遊戲中持續向下的加速度
控制
- 鍵盤 - 方向鍵、WASD 和自訂按鍵綁定
- 滑鼠 - 點擊、移動和 FPS 風格的指標鎖定
- 觸控 - 行動裝置觸控事件和虛擬搖桿
- 遊戲手把 - 使用 Gamepad API 支援控制器
音訊
- Web Audio API - 程式化聲音生成和空間音訊
- HTML5 Audio - 簡單的音訊播放,用於音樂和音效
逐步工作流程
建立基本 2D 遊戲
- 設定包含
<canvas>元素的 HTML 檔案 - 取得 2D 渲染上下文
- 使用
requestAnimationFrame實作遊戲迴圈 - 建立具有位置、速度和大小屬性的遊戲物件
- 處理鍵盤/滑鼠輸入以控制玩家
- 實作遊戲物件之間的碰撞偵測
- 加入分數、生命值和勝負條件
- 加入音效和音樂
建立 3D 遊戲
- 選擇框架(Three.js、Babylon.js、A-Frame 或 PlayCanvas)
- 設定場景、攝影機和渲染器
- 載入或建立 3D 模型和紋理
- 實作光照和著色器
- 加入物理和碰撞偵測
- 實作玩家控制和攝影機移動
- 加入音訊和視覺效果
發布遊戲
- 最佳化素材(壓縮圖片、最小化程式碼)
- 跨瀏覽器和裝置測試
- 選擇發布平台(網頁、應用程式商店、遊戲入口網站)
- 如有需要,實作獲利機制
- 透過遊戲社群和社交媒體推廣
遊戲範本
assets/ 資料夾中提供了入門範本。每個範本都提供一個完整且可運作的範例,可作為新專案的起點。
| 範本 | 說明 |
|---|---|
paddle-game-template.md |
使用純 JavaScript 的 2D 打磚塊風格遊戲 |
2d-maze-game.md |
使用裝置方向控制的迷宮遊戲 |
2d-platform-game.md |
使用 Phaser 框架的平台遊戲 |
gameBase-template-repo.md |
遊戲基礎範本儲存庫結構 |
simple-2d-engine.md |
具有碰撞偵測的簡單 2D 平台遊戲引擎 |
參考文件
references/ 資料夾中提供了詳細的參考資料。請查閱這些檔案以深入了解特定主題。
| 參考文件 | 涵蓋主題 |
|---|---|
basics.md |
遊戲開發簡介與結構 |
web-apis.md |
Canvas、WebGL、Web Audio、Gamepad 及其他網頁 API |
techniques.md |
碰撞偵測、圖塊地圖、非同步腳本、音訊 |
3d-web-games.md |
3D 理論、框架、著色器、WebXR |
game-control-mechanisms.md |
觸控、鍵盤、滑鼠和遊戲手把控制 |
game-publishing.md |
散佈、推廣和獲利 |
algorithms.md |
光線投射、碰撞、物理、向量數學 |
terminology.md |
遊戲開發詞彙表 |
game-engine-core-principles.md |
遊戲引擎的核心設計原則 |
疑難排解
| 問題 | 解決方案 |
|---|---|
| Canvas 為空白 | 確認在取得上下文後並在遊戲迴圈內呼叫繪圖方法 |
| 遊戲以不同速度執行 | 在更新計算中使用 delta 時間而非固定值 |
| 碰撞偵測不一致 | 對快速移動的物體使用連續碰撞偵測或減少時間步長 |
| 音訊無法播放 | 瀏覽器需要使用者互動才能播放音訊;從點擊處理常式觸發播放 |
| 效能不佳 | 使用瀏覽器開發者工具進行分析,減少繪圖呼叫,使用物件池,最佳化素材大小 |
| 觸控控制無反應 | 阻止預設觸控行為,並將觸控事件與滑鼠事件分開處理 |
| WebGL 上下文遺失 | 處理 webglcontextlost 事件,並在 webglcontextrestored 時還原狀態 |






