陀螺原生化計畫

卡尺 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 人週
音效/BGMWebAudio、<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:瀏覽器版和原生版位置自動比對

建議順序

  1. 修原生殼畫面錯誤(尖刺黑塊、2D 小貼圖)
  2. HUD 原生化(最大塊、最影響畫面)
  3. 2D 疊層、音效
  4. IO/帳務、輸入、選單(選單 A/B 要你決定)
  5. 打包、除錯工具、每日板測 → 機台可以實際換上
  6. 讓原生殼更快(自動玩從約 91% 往 99% 推;兩條執行緒負擔)

證據與數字:F:\tmp\spin-evidence-20260812\board\runs\20261018-hudseq\RESULT.md、20261020-pacer。原生測試 App:F:\tmp\jsshell-test。