天天看點

從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試

大體浏覽過emscripten的那一堆demo後, 心想試試移植個遊戲試試, 順便體驗下這項技術的實用程度

首先嘗試了Onescripter, 因為手頭上有可以編譯運作的FateStayNight. 

  1. 在工程配置中增加新的Platform: Emscripten, 并選擇編譯成可以執行的html
從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
  1. 編譯提示缺少bzlib.h, 增加libbz2工程(開源), 注意這個就需要編譯.bc庫了(相當于.lib)
從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
  1. 再編譯, 依賴庫沒問題了. 提示SDL_CD相關函數都找不到. 這也可以了解, web不友善通路光驅嘛. 使用#if EMSCRIPTEN宏隔離不支援的SDL特性代碼
從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
  1. 編譯通過, 可以運作了, 不過提示找不到腳本檔案. 原來emscripten對于檔案IO是有很大的限制的, 參考: Filesystem Guide
    1. 第一種比較簡單粗暴, 把所有依賴的檔案打包成一個.data檔案, 載入頁面時下載下傳, 下載下傳完再運作遊戲. 不過這時候所有的資料都是在記憶體中的, 是以fopen什麼函數其實通路的都是記憶體中的虛拟檔案系統. 實驗證明, 對于FateStayNight這種上GB資源的遊戲來說, 這個方法會導緻浏覽器崩潰-_-
    從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
    1. 第二種方式應該是floh在PPT中說的那種方式, 類似異步下載下傳檔案的方法. 由于隻是做實驗, 還沒有去嘗試
  2. 使用--preload-file連結選項把資源檔案夾打包成.data先看看效果(使用了另一個比較小的遊戲的資源: Tsukihime. 宅男們懂的)
    1. 打開頁面運作時沒反應, Ctrl+Shift+J打開Chrome的調試視窗, 發現浏覽器不允許通路file:///協定的路徑
    從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
  3. 上網找了個綠色的HTTP伺服器小工具: HFS, 然後通過HTTP伺服器通路這個頁面, 終于可以讀取檔案了. 頁面載入後會有一個進度條顯示下載下傳進度
從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
  1. 運作, 調試視窗顯示Mix_XXXX的函數都沒實作, NM, 有這麼坑人的麼......使用#if EMSCRIPTEN屏蔽之, 先不播放音效了
從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試
  1. 再運作, 又提示找不到某些SDL_XXXX函數, 放棄!
從Native到Web(六), emscripten學習筆記: SDL遊戲移植嘗試

然後又嘗試了sdlpal(大名鼎鼎的仙劍95), 也是編譯沒有問題, 運作時才提示找不到某個SDL函數的實作. 這個真無語, 找不到你還連結成功幹嘛, 白激動了

兩個SDL遊戲都以失敗告終. 看了下SDK裡帶的庫, 好像也就OpenGL ES, OpenAL, SDL等. Bullet也有第三方的移植. 是以商用的話, 第三方庫的選擇比NaCl差很多

還是再等等看吧, 現在拿來也就是做個DEMO而已

是以說emscripten的SDL根本就不完整, 實際使用的話, 估計也就是替代一些視窗/輸入消息什麼的處理吧

Valve在GDC上提到移植到linux上的一些經驗, 其中就說SDL是跨平台一種不錯的替代器, 如果你懶得為每一種平台都實作一遍程式架構, 視窗, 鍵盤滑鼠消息什麼的, 就用SDL吧

另外, 在運作時發現, FireFox比Chrome的加載速度快好多. 果然是Mozilla自家孩子親啊~

本文參與 騰訊雲自媒體分享計劃 ,歡迎熱愛寫作的你一起參與!

本文分享自作者個人站點/部落格

http://blog.csdn.net/xoyojank

複制

如有侵權,請聯系 [email protected] 删除。