陀螺原生化計畫
卡尺 2026-10-20 20:30(順序依蔡 119076 調整) ・ 方向:保留現在的遊戲程式(TypeScript),只把「瀏覽器底下那一層」換成我們自己的原生殼 ・ 人週為粗估、低信心
原則:遊戲程式只寫一份。PC 照樣用瀏覽器開發;機台上由原生殼執行同一份程式。原生殼負責提供遊戲用到的東西(畫圖、讀檔、計時、音效、IO),遊戲程式不用分兩版。
目前:3D 畫面與玩法已經在原生殼裡跑,同樣 6 人自動玩 WebView 約 79% → 原生約 91% 準時。
每一塊怎麼做
| 項目 | 現在靠瀏覽器的什麼 | 原生殼怎麼做 | 遊戲程式要改嗎 | 狀態/粗估 |
|---|---|---|---|---|
| 3D 畫面 | WebGL2、讀檔、圖片解碼 | V8+自己接 OpenGL ES、HTTP/檔案、Android 圖片解碼 | 不用 | 已做 剩影子黑塊、2D 畫布小貼圖 |
| 玩法層 | 主執行緒、計時器、鍵盤事件 | 第二個 V8(同瀏覽器的主執行緒/背景執行緒分工) | 不用 | 已做 剩:兩條執行緒都很忙,要降 |
| HUD(面板、分數、任務、計量條、JP 招牌) | React 產生網頁元素 → 瀏覽器 CSS 排版 → 再照著畫到 WebGL | 直接讀 UI 設定檔(.ui.json)排版,用排版函式庫 Yoga(React Native 用的那顆)算位置;字用現有字圖集;畫圖沿用現有 HUD 的 WebGL 畫法 | HUD 改成「只從 UI 設定檔來」,不能再在畫面元件裡手寫網頁元素/CSS | 最大 約 5~9 人週 |
| 2D 疊層特效(飄字、票數、虛線、報獎) | Canvas 2D 繪圖指令(錄下來在背景執行緒重播) | 大部分已經是 WebGL 畫(WebGL2D);剩下的文字、路徑、漸層補一個小的 2D 繪圖子集(字用字圖集,少見的用 Android 內建畫布) | 不用(新特效照規定走 Prefab) | 中 約 2~4 人週 |
| 音效/BGM | WebAudio、<audio> | 殼裡做一個跟 WebAudio 同樣用法的小版本,底下接 Android 低延遲音效(AAudio/Oboe)或 miniaudio 混音 | 不用(SoundSystem 照用) | 中 約 2~3 人週 |
| 開機、選單、模式選擇、操作員設定、錯誤畫面 | React 網頁畫面 | 兩個選項(要你決定): A. 也改成 UI 設定檔畫面(跟 HUD 同一套) B. 只在打開選單時用一個網頁視窗(平常不經過瀏覽器) | A:要改 UI 寫法;B:不用 | 待決定 A 約 4~8 人週;B 約 1 人週 |
| IO、帳務、共用後台 | WebSocket 連 APK 的 IO 服務、localStorage、WebCrypto、fetch | 殼裡提供 WebSocket(接同一個 IO 服務);localStorage 改成原生「斷電不掉」的儲存;加解密用 Android 原生 | 不用 | 中 約 3~5 人週,帳務要長跑驗證 |
| 輸入(按鈕、搖桿) | 鍵盤/搖桿事件 | IO 服務的輸入照現在方式送進遊戲事件 | 不用 | 小 約 1 人週 |
| 打包、加密、更新 | APK 內網頁包+TPM 解密 | 出貨版程式打包進 APK,照現在的加密方式由原生殼解密載入 | 不用 | 小 約 1~2 人週 |
| 除錯工具 | Chrome 開發者工具 | V8 原生支援 Chrome 除錯協定:一樣可以用 Chrome 連到機台下中斷點、看 log、量效能 | 不用 | 小 約 1 人週 |
codex 助手先前評估整體 40~75 人週(低信心);上表加總約 20~35 人週(不含選單 A、不含長跑驗證與緩衝),兩者口徑不同,以實做後重估為準。
網頁開發怎麼保持方便
平常開發:不變
- 一樣在 PC 用瀏覽器開發、測試(開發伺服器、網址開關、編輯器都照舊)
- UI 編輯器、特效編輯器、關卡編輯器都還是網頁工具,不受影響
上機台:直接連 PC
- 原生 APK 開發版直接從 PC 開發伺服器載入最新程式(跟現在 WebView 一樣)
- 改完重開 App 就是新版;之後可做自動重載
- Chrome 可直接連機台除錯
要多守的規矩
- 遊戲/畫面程式不要新用「只有瀏覽器才有」的功能(新的網頁元素、新的瀏覽器 API)
- HUD/畫面只從 UI 設定檔來,不在元件裡手寫 CSS
- 真的需要新功能 → 在原生殼補,不在遊戲裡繞
自動檢查
- 程式檢查:遊戲路徑用到瀏覽器專用功能就提醒
- 每日機台:原生殼跑一次,截圖比對+準時率
- HUD:瀏覽器版和原生版位置自動比對
建議順序
- 修原生殼畫面錯誤(尖刺黑塊、2D 小貼圖)
- HUD 原生化(最大塊、最影響畫面)
- 2D 疊層、音效
- IO/帳務、輸入、選單(選單 A/B 要你決定)
- 打包、除錯工具、每日板測 → 機台可以實際換上
- 讓原生殼更快(自動玩從約 91% 往 99% 推;兩條執行緒負擔)
證據與數字:F:\tmp\spin-evidence-20260812\board\runs\20261018-hudseq\RESULT.md、20261020-pacer。原生測試 App:F:\tmp\jsshell-test。