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