-
Notifications
You must be signed in to change notification settings - Fork 53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Egret 的 童话 与 现实 #5
Comments
干货很多 |
胖总说得好。其实触乐转 Egret 我一直觉得挺不合适的。媒体要做的应该是从第三方角度的审视,而不是把自述优势的第一方文章扔出来留着读者自己判断去。 |
小胖哥能否抽空出一篇你看好的几个引擎的点评比较?这样会给我这样的菜鸟一些更清晰的方向。 |
|
对他们引擎不感冒。。他们的工具texture merger和dragonbones一直在用 |
“『性能』通常不是引擎所要解决的核心问题” , 尤赞! |
技术分析客观。 |
小胖这篇文章写的不错,就你的几个建议,我觉的还是很中肯的回答一下。 工作太忙了,恕回复简短。 |
|
写的非常中肯,但是难免会伤害一些人的「玻璃心」。 看完默默悼念:还是 Flash 大法好! |
读完小胖的吐槽和7yue的回复,默默点赞 |
那个Runtime只是暂时的权宜之计,别投入太多感情。 7yue哥~ |
完全赞同 |
楼主真是可以堪称程序员里的作家,码字能力真的很强!
当然egret的最终的发展还是要靠产品说话,没有牛逼的产品就是牛皮吹上天也没用。 |
始终认可敢于做事的人,这是一种担当,也是一种精神。。。 |
说得非常好 |
同意小胖的观点,Egret针对Flash开发者的营销我觉得对于很多开发者是有反作用的。
|
Flash API 可能是对原来as的开发者友好吧,毕竟as阵营的人还是挺多的 |
小胖说的很在理, 顶一下. |
顶一下 我觉得ts就像是一颗很甜的糖,当你尝了它,你会爱上它,看上去完全没害处,但是你可能没发觉,吃糖会引起糖尿病。 ##“ts不是最好的” 没错,大家可以看一下http://githut.info
那些还在觉得ts会火的人,小心“糖尿病” ##为什么开源引擎不适合用ts
##为什么不要学ts
之前有人说了句话,我觉得说的很对, |
文章的一些建议还是很不错的. 个人建议 我知道小胖不爱用这些, 喜欢纯 JS , 这种事情么 就是 "谁用谁知道" 是坑不是坑, 葡萄是甜是酸,只有用过的人才能体会, 用的好的人才真正理解 一个好的程序员从来不怕掌握几种语言(框架), 因为程序实现万变不离其宗! 不要害怕学习新东西~ |
赞对 egret 抽丝剥茧、直至核心的剖析。 |
@Wuhao, 吃糖和糖尿病貌似没有关系... |
作为一个web前端工程师,确实很讨厌ts,之前满怀期待的学习过egret,发现用起来很别扭,于是投入了cocos2djs的怀抱了。 |
1.没觉得ts方便,反而是诸多束缚. |
就一点不太赞同,其他都说得很赞: |
@sqz929,中肯的意见我可以听。但是你说把cocosjs改成ts版再加一些as3的api,就是egret,我觉的错的离谱。如果你不同意,你可以举出egret设计时候先照着cocosjs改,然后再改成as3的例子出来。我真的想不明白如果egret要照着as3做api设计,为何中间要经停一下cocosjs,难道cocosjs跟as3很像么?至于你是出于什么目的在github上这么借题发挥,那是你的想法了,只是这么评价实在很没依据,也很low,不仅抹黑了egret,也抹黑了cocosjs。github是开发者聚集的地方,我回答你的目的是不要让初学者看了你的评论后误人子弟。 |
作为使用引擎的人,我觉得像Flash也好,像HTML5也好根本不重要。对于商业项目选择引擎,我觉得考虑的主要是2点: 最后我觉得一个好引擎一定要有好的文档。这点Egret做的还行,但是还有待进步。而反观cocos2d-x则一塌糊涂。本来上个项目是cocos2d-x的,这个项目也顺接下来的,但是进到3.x之后cocos2d-x的开发给人感觉非常混乱,最新出了cocos引擎一堆问题,文档缺失(和过期)严重,让人提不起兴趣。 |
@joshuastray |
把看似复杂专业的问题说清晰说明了真是素养 |
mark |
最近才上手关注和学习Egret,egret借鉴的是flash中好的一面吧,只是工具方面,感觉还不是太成熟,好在帮助文档比较全和细,加油吧egret! |
不能认同更多啊 |
这文笔,不谈了 |
@tcper 超同意这点 |
Typescript有类型检查就是模仿FLASH |
胖总可以的,很有素养!赞 |
Egret 的童话与现实
写在前面的一些话,不必要,但重要
我一直很少谈论Egret引擎,因为我对这样一款『打着HTML5游戏引擎旗号,实际以拉拢Flash开发者为主旨』的奇怪引擎不感冒。
但是最近Egret越来越多的出现在我的生活和工作当中,让我无法再继续无视它的存在。最近正好Egret联合创始人之一的7yue老师在知乎里阐述了一些Egret的想法和理念 ( http://www.zhihu.com/question/27078280 ) ,那我也就顺着那篇文章,把我的一些观点也拿出来说一说吧。
在开始之前,我先交代一些事情:
好了,扯了一堆没用的 进入正题吧。直接点,先抛观点:
我的整篇文章 都将围绕且只围绕上述几点展开。不喜欢 不感兴趣的,可以撤了。
Egret 与 TypeScript , 是童话还是谎言?
7yue老师的文章里第一个阐述的问题就是 Egret 为什么选择 TypeScript ,总结一下有以下几点:
我觉得这几个观点都有些问题。
首先,TypeScript并不是ES6的超集,更不是子集,只是有很多交集而已。TypeScript的代码现在以及未来都不大可能『不借助TS的编译器编译,直接跑在浏览器里』。
虽然它和ES6语法上的确实相像,但是这种相像意义不大,他们就是两种不同的语言。类似的,UnityScript和JS也很像,C#和Java语法也很像一样,但本质上就是不同的东西。
认为『TypeScript 就是 ES6的提前实现,学习TypeScript 就相当于学习ES6,就是提前与未来接轨』的想法是不对的。
TypeScript就是一个借鉴了ES6的语法,但是加入了types,不支持异步yield await的 js transformer 。真想提前与未来接轨,请直接学习真正的ES6,ES6 to ES5 的transformer已经很成熟了。
其次,目前的JS确实有很多不足,一个用10天时间写出来用来应付差事的语言能有什么好的(BTW:从语法层面,我最喜欢的语言是 AS3 和 Python2 ,作为有多年Basic + Java + PHP经验的人,喜欢这两种语言一点也不奇怪 )?
但是为了弥补这种不足,我更建议选择真正的ES6,而非TypeScript。而且什么module啊、classes啊 ,在ES5时代也早就有成熟的解决方案了,虽然这些方案不够统一,不够完美,但是早已被广大程序员所熟悉和理解,也经过了足够的验证,是可用和好用的。
TypeScript真正带来的价值(标准ES6无法提供的)基本上只有types,编译期的类型检查。给弱类型动态脚本语言加入类型检查,这么多年一直是很有争议的一件事。早在ES4里就尝试加入,结果最后连自己都悲剧了,后来ES6里又想加入,后来又去掉了,计划在ES7里加入……
不可否认,类型检查是有好处的。但是它的好处大多数也仅仅体现在『有助于减少在编码期因失误造成的拼写错误等低级错误的发生』。也许有人会说,这个好处已经足够了,配合强大的IDE可以更好的开发复杂的企业级项目,尤其那种大型团队,成员众多,水平良莠不齐balabalabalabala…… 他们说的就跟如今PHP Python Ruby 和JS没开发过大型项目似的……
另外,『TypeScript并不强制要求变量指定类型,并且可以和兼容ES5的传统js代码混用』这点,很多人把它看成是优点。那些有这种想法的朋友,你们确定这是优点吗?是优点吗?是吗?一边说『有了类型检查 再也不怕开发大型 起夜急 项目了』,一边对『可以和兼容ES5的传统js代码混用』持认可态度的人,精分的真是可以了。
说了这么多, 其实我想表达的不是TypeScript一无是处,而是我们没必要把它神话。他就是诸多js transformer里的一个,还不是最好的那个(没有最好 ———— 后半句自己心里默念一下吧,我懒得打字了)。
我觉得7yue老师说的那几点里,让他选择TypeScript最直接的原因只有第3点:『更类似于ActionScript3.0的语法,可以用TS基于Canvas来封装跟Flash ActionScript3.0类似的API结构设计』。
我必须强调一下,我不是说Flash那一套不好,更不是觉得AS3不好(但是总有人不信)。而且我对Flash的感情不比任何Flash开发者少,毕竟我们这一代70后80初的人 也是看着Flash动画长大的。当年的闪客帝国给我带来过无数美好时光。而且我很多游戏开发的技术都是从Flash游戏开发的书籍里借鉴学习的。
但是,我特别反感『把HTML5弄成Flash那个样子』的做法。 简单的说:我觉得我们可以借鉴Flash里好的设计思想,更要保留和发扬Flash领域里那些优秀的经验,但没必要在API层面去模仿Flash和AS,而属于HTML5自己的特点和优势。
而且这种模仿甚至会把Flash里的那些坏味道也带进来。典型的就是那个MovieClip,我都无力吐槽了,从名字到内部设计,根本不是为游戏准备的。
引领『模范Flash的API,以便让Flash开发人员更容易上手』这种思潮的框架/引擎 自然是大名鼎鼎的 easelJS 。后来我在盛大也和同事李正林(其实主要是他)搞的QuarkJS也是类似的东西,虽然自己参与其中,但是一点不喜欢。
说句题外话:也许有人会说,哪个社区不都是如此?NodeJS的兴起不也是因为搞JS的人『喜欢JS那一套东西』,所以balabalabala…… 但是这里面有一个本质的区别:NodeJS是充分挖掘了JS本身的特质和功能,让JS可以做更多的事情,而不是用JS去模拟其他某种语言,更不是从JS代码翻译成其他语言代码后再去执行。
好,把话题拉回来。虽然我不喜欢『模仿Flash的HTML5游戏框架』,但是我对『模仿FlashPunk和flixel这类Flash游戏框架』的做法是持肯定态度的。我的这两种态度并不矛盾:
而这种喜欢用HTML5模拟Flash的人,通常有一个常挂在嘴边的理由:这样就可以用那些Flash领域里的成熟的工具来辅助开发了。一个典型的(也是唯一一个有点现实意义的场景)是:在Flash的IDE里导出的动画描述文件(json格式)可以被这类仿Flash的引擎直接使用。但是懂技术的都懂,这根本不需要模仿Flash,这只和json的解析方式有关。
而从集Flash和HTML5技术之大成的Adobe公司所做的Edge系列的品质,我们就能明白其中的真实价值到底几何了。
我们可以梳理一下Egret所做的事情:
这么折腾一圈之后,除了对初级Flash开发人员更友好(中高级的可以轻松驾驭HTML5,不需要折腾,例如Egret团队里的那些Flash程序员)之外,其他的意义并不大。
而7yue老师文章里几句看似一带而过的话,也从一个侧面印在了我的观点。也许这些话才是Egret团队潜意识里选择TypeScript的真正源动力:
第一句只看后半句就好,因为『让JS游戏开发人员更舒服些』是个伪命题,大多数我接触到的JS开发者都只是觉得别扭。
而第二句,我是不是可以这么理解:因为Egret团队的人对Flash特别特别了解,所以把HTML5模拟成类似Flash的东西后,才能更快速的展开后面的计划?
而Egret产品线里有一款叫TS Conversion的工具, 它的存在也让我进一步巩固了我的这一观点:
以我对Egret团队的了解,他们完全有能力针对HTML5技术本身的特点去开发引擎、工具等等,但是他们就是放不下Flash的情结,这就是我前面所提到的『对Flash的傻傻痴恋』。
而这种痴恋其实里外不讨好。知乎上那位一直说『Egret很好,要是把TS换成AS就更好了』的Egret拥护者,似乎也验证了这点。
我们可以很容易的分析出 Egret + TypeScript的组合,对开发人员友好度的排名情况(从最友好,到最不友好):
Flash,Flash,Flash …… Egret的一系列选择,一直在向我传递着一个信号:Flash为大。
也许Egret的开发者的初衷并非如此,但是证明你的,不是你的心,而是你的所作所为。
在这里插播一件几个月前我在某群里和一位资深Flash粉之间发生的趣事:
他在群里说Egret好,靠谱,牛逼。我问他,你用过吗?他说没用过。我说那你为什么说他好?他说,因为这是从Flash社区出来的人做的,我相信他们。
这…… 还真是让我感动呢,计算机信息技术专业要变文科了?
唉 不说了,说多了全是口水,弄得好像我和Flash社区势不两立似的。其实我不喜欢的是JS社区,而flash社区一直是我学习各种游戏开发知识的宝库(有我发过的无数条黑js,夸flash的微博为证)。所以,大家千万别误会。
既然已经聊到了开发工具,那我就顺势离开TypeScript这个的话题,聊聊Egret的开发工具吧。
Egret 开发工具, 任重而道远
这个其实没什么好说的,我个人很认可7yue老师说的那段Egret对开发工具的观点:
在日常游戏开发中,在选择工具时,我也一直在坚持『若干款开发工具,他们之间独立,小巧且专注,之间的数据通用且可以协作』这样的原则。例如 地图编辑使用TiledMap, 骨骼动画使用Spriter, 图片打压缩和打包使用自己开发的一个小工具……
可以说,Egret的开发工具是走在正确的路上,所以现在的功能缺失啊、各种小bug什么的都不是事,随着时间的推移,都好说。
但是一个完整的的功能强大和齐全的IDE,是一个躲不开的东西。Unity是也是Egret必须面对的对手。毕竟,早晚都要做,这部分应该是最大的难点,也是Egret和其他基于完全基于代码的引擎的最大差异。
我最担心的是 Egret内部对这个开发工具没什么太大的野心,觉得自己有很多其他优点,IDE上差不多就行了,而不去用Unity的高标准要求自己。
我是希望Egret团队能把重心放在工具这方面,而那个Runtime在我看来,其实是可有可无的东西。
『研发开发工具』这个领域我不是很熟悉,也不说太多了,下面就聊一聊Egret的那个Runtime吧。
Egret Runtime, 也许只是看起来很美
Egret 一切基于性能的自信,其实都是源于这个Runtime。
在其他方面,无论是Egret Cocos2D-JS 还是我比较推崇的一些国外的同类HTML5引擎,性能其实都差不多的。
『性能』通常不是引擎所要解决的核心问题,而各个引擎所使用的那些优化相关的东西也都是一些通用的、尽人皆知的东西,不存在什么『独门秘笈』。另外在实际场景中,很多优化方法要么有很大的局限性,不具备普遍价值。比如被过度神话的『脏矩形』优化技术。
Egret Runtime做的事情简单说来,就是把 浏览器内置的那个比较慢的HTML5 Canvas,『替换』成一个更高性能的 OpenGL的画布。
原理跟 PhoneGap-FastCanvas 、CocoonJS 以及 Ejecta 有很多相似的地方。
在没有Runtime时,Egret就是一个选择了TS作为中间语言的HTML5引擎,没啥特别的,暂不细说。
而Egret Runtime可以以两种形式存在。
第一种,可以脱离浏览器单独使用,这时候Egret 则变身为『支持TS语言的原生游戏引擎』。它的最直接的竞争对手就是 Cocos2D-JSC 、Unity2D 一类的东西 。此时和这两者比, 它除了用了TS,也没啥特色和优势(相反,由于TS,还带来了些劣势)。这第一种情况我想也不是Egret的主要发力点,只是一个『附加价值』,没什么好说的,重点是第二种。
第二种,内嵌在浏览器里,作为一个浏览器底层的插件。这正是Flash插件以前做的事情。不同之处在于你的代码在没有安装这个Runtime的浏览器里也能运行,只是可能会比较卡而已。
第二种方式看起来比较美妙,但现实往往比较残酷:
事实上,Egret也确实在 to Business(用2B怕引起误会…)的路上不断的努力着。
Egret的这些努力没什么不对,一个只关注『如何让引擎技术上牛逼,而忽视市场』的引擎厂商是很难生存的。但是这里面也存在着很多的隐患和不确定性:
也许有人会说,WebGL 在移动端的普及还要很久,但是再久也会比ES6的普及来得早,再久也会比Egret成熟的时间要早。(Egret的版本号虽然挺大,到1.x了,但是让我来评价的话,应该还在0.3x的阶段,离一个出色的游戏引擎距离还很远,因为如前所述,我觉得IDE很重要)。
另外,虽然我认可Egret在市场上的努力, 但是最近发生的一些事,让我产生了一些逆反心理。我觉得Egret的本质仍然是技术产品,所以我更希望它能优先考虑从技术和游戏引擎的本职工作上征服我,而不是先在市场营销上取得成功,然后利用市场绑架我(这种事情确实已经发生了)。当然,这些也许是我的技术情结在作祟,对于那些觉得『开发游戏就是赚钱,其他都是扯淡』的人而言,我真的是在扯淡。
对 Egret 的一些建议
说了这么多,表达了很多对Egret的不满,和对7yue老师的不敬,但是我必须要说,HTML5游戏领域需要Egret这样的团队,至少他们做了一件很了不起的事情:把HTML5游戏这个领域再次炒的火热起来,而且不是没有营养的虚假炒作,而是真刀真枪的实干。
所以,虽然我前面说了,我写这篇文章不是『为了Egret好』,但我还是『希望Egret好』。
最后提几个充满了我个人喜好,但是可能别人完全不认可的建议吧:
也许有人会用7yue老师 文章中那最后的几句鸡汤来反驳我,说我的观点是『基于现在去假设未来』,或者说我『没本事创造未来,就知道瞎预测未来』…… 对此,我只想说:这么有人文情话的话题,还是等我们60岁以后(如果我能活到那时候)再来讨论吧。
最后,总结一下我这篇文章,其实就是几个不满:
也许这种在不满情绪的驱使下所写出的文章,都是满满的负能量,毫无实际价值,但是它至少让我『输出个人价值观』的欲望得到了充分的满足,所以,感谢每一位读了它的朋友。
谢谢。
The text was updated successfully, but these errors were encountered: