Re: [請益] Html5手遊潮流(?)

作者: ybite (小犬/小B)   2015-11-03 01:14:37
被靠北遊戲業釣上來了,來認真發一個技術文......
不過在這之前,我的主觀認定是這樣的:
* Web 上,Flash 或插件為主的遊戲會在接下來兩年逐漸消失
* 手機上,主力仍會是無法在 App Store 或 Google Play 上架的遊戲
「大作」仍然會遇到各種麻煩的技術限制
(因為這裡是講免上架 HTML5 瀏覽器遊戲,容我跳過 JS + Native 的方案
例如已經成形的 Cordova / PhoneGap, Titanium 還有很有可能竄起的 react-native)
好了,以下技術長文。
大體來說,現在 HTML5 的遊戲技術實踐
可以先以 Rendering(渲染)和 Scripting(程式)這兩方面去作區別
Rendering 可以走 DOM、2D Canvas 或 WebGL
走 DOM 不用多說,手機看很多網頁捲動還是超卡,基本上不實際
2D Canvas 或是 WebGL 才是比較理想的解答,其中 2D Canvas 的支援比較理想。
iOS 直到去年的 8.0 才預設開啟 WebGL,所以這可以說是比較新的領域。
WebGL 1.0 其實基本上就是整個 OpenGL ES 2.0 API 開個網頁用,
用在遊戲上「照理說」可以一樣的 3D 效果,但問題卡在 Scripting,後述。
Scripting 的部份,很遺憾目前我們還是只有 JavaScript
目前大概就是純 JS 與 asm.js (Emscripten) 兩個方向了
(tl;dr: JIT 加速 / ES6+ -> GC pauses -> 多緒困境 -> asm.js -> WebAssembly)
這幾年純 JavaScript 如同推文說的,慢的問題已經隨著 JIT 解決
語法髒的問題已經隨著 ES6 / Harmony 的發展走進歷史,ES7+ 根本是外星語言
雖然對於寫遊戲來講,我覺得 JavaScript 已經足夠,用什麼語法只是個人喜好
實務上,像 Chrome 的 V8 都已經作到兩段式的 JIT 加速
第一段基礎加速,猜測物件型別,在第二段時將瓶頸編譯成機器碼
所以對於非常簡單的 Loop benchmark,現在的 node.js / Chrome / Firefox 都能樂勝
問題在於 JIT 造成的記憶體消耗,以及最大的致命傷,GC Pauses。
JavaScript 必須仰賴 Garbage Collection(垃圾收集簡稱 GC)作物件清潔
但垃圾清潔就需要時間,這個時間會變成一個定時炸彈
你永遠不知道瀏覽器什麼時候會作 GC,也很難從外界直接干涉
另一個問題大家也講到了,JavaScript 很難作多序。
JavaScript 一開始就像所有的 UI 框架一樣採用單序 Event Loop 的設計
所以到了後來要加上平行運算就只能用像 Web Worker 一樣的作法
因為 GC Pauses 與平行運算的限制,WebGL 的 Game Loop 幾乎無法作任何複雜運算
但如今產業已經慢慢在克服這個問題,從早期的 asm.js 到現在的 WebAssembly
也許在過幾年,我們會慢慢看到不需要插件的複雜 3D 遊戲在網頁上出現
作者: ybite (小犬/小B)   2015-11-03 01:19:00
補充一下,RPG Maker MV 的 HTML5 輸出是用 pixi.js喔,他整個是用 HTML + JS,App 要用 Intel XDK 囧
作者: goury   2015-11-03 02:33:00
結論看不懂 Orz 官方商城是指?手機開網頁無法付費?
作者: littleshan (我要加入劍道社!)   2015-11-03 09:34:00
不是不能付費,是串接金流很麻煩
作者: y3k (激流を制するは静水)   2015-11-03 09:38:00
我是覺得除非瀏覽器API可以直接Call GC或有VM架構在裡面 否則永遠都追不上Native的車尾燈 開發Native反而還比較省成本...
作者: littleshan (我要加入劍道社!)   2015-11-03 10:02:00
不過,GC的問題,我覺得遲早會成為 minor issueunity 也有 GC 問題,但隨著手機硬體進步,這個問題越來越不顯著
作者: BeStronger ( )   2015-11-03 10:17:00
其實日本已經做了十八禁HTML5手遊
作者: wimdos (Komm)   2015-11-03 11:37:00
DMM已經在做這塊了,最近的幾款都是網頁H game支援手機
作者: bndan (seed)   2015-11-03 13:25:00
如果比效成 NATIVE好還可以理解 如果要比開發成本...應該沒什麼程式能比web還低才對...不然就不需要討論hybird app了...
作者: LaPass (LaPass)   2015-11-03 14:02:00
作者: asoedarren (天真歲月陽仲壽)   2015-11-03 17:50:00
完全正解 佩服
作者: holymars   2015-11-03 23:54:00
我在想,Unity的GC問題有八成原因是mono版本太舊了...
作者: y3k (激流を制するは静水)   2015-11-04 07:16:00
APP還可以談 現在講的是"遊戲"耶XD
作者: Frostx (Naga)   2015-11-04 11:24:00
完全不懂這塊,只能推
作者: justben (BEN)   2015-11-04 13:25:00
react / react nativereact 可以對局部DOM做更新 不必每次都更新DOM TREEreact natvie 是調用原生API 跟Phonegap 用webview不同
作者: LayerZ (無法如願)   2015-11-04 20:27:00
不懂只能推+1..
作者: Shinpachi (Shimura)   2015-11-05 11:30:00
作者: chowleft (什麼....)   2015-11-05 16:20:00
十八禁手遊框架...聽起來就很有趣說
作者: littleshan (我要加入劍道社!)   2015-11-05 22:54:00
unity的gc問題還有很大一部份出在C#身上
作者: lzainside (Lza)   2015-11-06 20:30:00
我覺得R18手遊可能要用正常遊戲mode來包裝,不然在外面玩感覺會有異樣眼光XD?
作者: wulouise (在線上!=在電腦前)   2015-11-08 15:42:00
R18應該走攜帶式裝置最好吧 有google glass這一類的在外面就不會不好意思XD
作者: jenocool   2015-11-11 20:09:00
作者: LayerZ (無法如願)   2015-11-12 16:26:00
R18做個"行動模式"就好啦=w=

Links booklink

Contact Us: admin [ a t ] ucptt.com