Open finscn opened 9 years ago
干货很多 解答了我对于E的不少疑惑,受教了。感谢。
胖总说得好。其实触乐转 Egret 我一直觉得挺不合适的。媒体要做的应该是从第三方角度的审视,而不是把自述优势的第一方文章扔出来留着读者自己判断去。
小胖哥能否抽空出一篇你看好的几个引擎的点评比较?这样会给我这样的菜鸟一些更清晰的方向。
对他们引擎不感冒。。他们的工具texture merger和dragonbones一直在用
“『性能』通常不是引擎所要解决的核心问题” , 尤赞!
技术分析客观。
小胖这篇文章写的不错,就你的几个建议,我觉的还是很中肯的回答一下。 推出纯 JavaScript 版本,如果真的对ES5不满,就搞ES6的。(这个可以搞起,其实成本也不大) 重点发力开发工具。(这个Egret团队百分百赞同,必须发力,光从15年我们计划工具团队增至40个优秀的工具开发工程师就可以了解我的决心了) 那个Runtime只是暂时的权宜之计,别投入太多感情。(目前这个runtime是着重解决碎片化,适配,原生驱动及硬件直接调用的一个加速组件库,它可能未来2年都有很大机会,至于再远的未来,就要看Web技术在这些系统上的进化程度了) Egret是一个游戏引擎,一个HTML5/JS游戏引擎,请不要搞成另一个『Flash』。(我也开始着手弱化Flash的思维了,因为Flash的开发者群体在向移动web游戏过渡中窗口期就这2年,过去了,也就不存在这个群体了,而且Egret归根结底也是JS的,不是Flash,但是如果可以像Flash一样做到那么成熟的一套产品体系,也算是一大成就了。) 请先用产品征服我,而不要用市场绑架我。(这个我不知道该如何说,我心中也希望用产品征服所有人,但是市场上永远不可能期望所有人都喜欢我们的产品,方案和设计。至于市场方面,我们希望是用市场影响更多人,而非绑架谁,因为在技术市场上,对于一个开发者而言,他们要做决策的成本太低了,喜欢就是yes,不喜欢就可以说No,还谈不到绑架的层面上)
工作太忙了,恕回复简短。 祝顺利, 7yue
写的非常中肯,但是难免会伤害一些人的「玻璃心」。
看完默默悼念:还是 Flash 大法好!
读完小胖的吐槽和7yue的回复,默默点赞
那个Runtime只是暂时的权宜之计,别投入太多感情。 7yue哥~
完全赞同
楼主真是可以堪称程序员里的作家,码字能力真的很强!
当然egret的最终的发展还是要靠产品说话,没有牛逼的产品就是牛皮吹上天也没用。
始终认可敢于做事的人,这是一种担当,也是一种精神。。。 期待你化蛹成蝶时被人奉为的美丽。。。
说得非常好
同意小胖的观点,Egret针对Flash开发者的营销我觉得对于很多开发者是有反作用的。
Flash API 可能是对原来as的开发者友好吧,毕竟as阵营的人还是挺多的
小胖说的很在理, 顶一下.
顶一下
我觉得ts就像是一颗很甜的糖,当你尝了它,你会爱上它,看上去完全没害处,但是你可能没发觉,吃糖会引起糖尿病。
没错,大家可以看一下http://githut.info 你可以看到
那些还在觉得ts会火的人,小心“糖尿病”
之前有人说了句话,我觉得说的很对, “不要把特斯拉变成爱迪生”
文章的一些建议还是很不错的. 对于 Egret 我是非常喜欢, 因为我喜欢 AS3. 但是没有正统的学过 JS, Egret 给我带来的就是无比的方便. 所以小胖说的友好度我非常认可
个人建议 想搞 html 游戏开发, 用 Egret, Cocoa2D... 等等, 喜欢那个, 那个觉得顺手就用那个,但这些都不是关键! 最重要的是公司小伙伴们都用它, 团体的力量才是最大, 它可以帮助你们减少合作成本. 纯 JS 就比较难做到这点
我知道小胖不爱用这些, 喜欢纯 JS , 这种事情么 就是 "谁用谁知道" 是坑不是坑, 葡萄是甜是酸,只有用过的人才能体会, 用的好的人才真正理解
一个好的程序员从来不怕掌握几种语言(框架), 因为程序实现万变不离其宗! 不要害怕学习新东西~ 一个程序员的真正价值是他的程序思路,逻辑,算法这些脑力值~ 其他的实现方面都一样,手熟而已! 快慢而已! 喜好而已!
赞对 egret 抽丝剥茧、直至核心的剖析。
不懂游戏开发,但认可这几个建议:推出纯 JavaScript 版本、Runtime只是暂时的权宜之计、重点发力开发工具。
任何一个产品都需要去思考自身的定位,搞清楚自己究竟帮助那些人解决了什么问题还是很重要的,不同的服务对象,会导致不同的最终形态和实施路径。
@wuhao, 吃糖和糖尿病貌似没有关系...
作为一个web前端工程师,确实很讨厌ts,之前满怀期待的学习过egret,发现用起来很别扭,于是投入了cocos2djs的怀抱了。
1.没觉得ts方便,反而是诸多束缚. 2.借鉴flash API没什么不好.
就一点不太赞同,其他都说得很赞: ts编译成js, 函数、类、变量也没什么变化,你想用js的方式来,那直接用编译好的js不就行了吗?
@sqz929,中肯的意见我可以听。但是你说把cocosjs改成ts版再加一些as3的api,就是egret,我觉的错的离谱。如果你不同意,你可以举出egret设计时候先照着cocosjs改,然后再改成as3的例子出来。我真的想不明白如果egret要照着as3做api设计,为何中间要经停一下cocosjs,难道cocosjs跟as3很像么?至于你是出于什么目的在github上这么借题发挥,那是你的想法了,只是这么评价实在很没依据,也很low,不仅抹黑了egret,也抹黑了cocosjs。github是开发者聚集的地方,我回答你的目的是不要让初学者看了你的评论后误人子弟。
作为使用引擎的人,我觉得像Flash也好,像HTML5也好根本不重要。对于商业项目选择引擎,我觉得考虑的主要是2点: 1)可能性:比如老板要开发html5转Native的游戏,那不支持这个特性的引擎,再优秀我也不能选。这是第一位的,其中包括Native可能要集成一堆SDK,引擎要支持我们可以自由导出API到脚本层。 2)易用性:有了可能性,之后就是效率问题,哪个引擎工作效率高。这可以拆分成引擎架构设计问题,工具集问题等。这个到底怎么做,我不是做引擎的,不做评价。但是最终目标是提高开发效率,减少开发者乱折腾的时间。 至于框架像什么,走什么路线,我觉得更想是个哲学问题。普罗大众不太关心,好用就行。 对于Egret,目前试用了一点,感觉还不错。我之前做过cocos2d,没做过Flash。主要的困扰是: 1)引擎功能还比较薄弱,很多游戏功能还不支持,比如Bitmap颜色叠加,以及一些原来可以通过shader做的特效。 2)TS2JS的问题是我开发的时候是TS,debug的时候是JS(在chrome里)。代码不能完全对应。虽然现在我基本能看懂,但是我不清楚某些地方TS会不会翻译的比较晦涩。
最后我觉得一个好引擎一定要有好的文档。这点Egret做的还行,但是还有待进步。而反观cocos2d-x则一塌糊涂。本来上个项目是cocos2d-x的,这个项目也顺接下来的,但是进到3.x之后cocos2d-x的开发给人感觉非常混乱,最新出了cocos引擎一堆问题,文档缺失(和过期)严重,让人提不起兴趣。
@joshuastray 好像还是能扯上点关系的,糖吃多了会胖,胖了容易引起糖尿病~~
把看似复杂专业的问题说清晰说明了真是素养~文科生飘过~
mark
最近才上手关注和学习Egret,egret借鉴的是flash中好的一面吧,只是工具方面,感觉还不是太成熟,好在帮助文档比较全和细,加油吧egret!
不能认同更多啊
这文笔,不谈了
@tcper 我个人觉得之所以Flash API,不仅仅在于对flash的偏执,而是flash api的显示对象管理就是好,就是比canvas, openGL先进。看看那些用openGL的代码,哪个不是自己封装一堆一堆乱七八糟奇怪的对象?自己另辟蹊径就能比flash API好?我不相信。
超同意这点
Typescript有类型检查就是模仿FLASH FLASH是乐色所以TS就是乐色 不应该是这个逻辑吧
胖总可以的,很有素养!赞
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岁以后(如果我能活到那时候)再来讨论吧。
最后,总结一下我这篇文章,其实就是几个不满:
也许这种在不满情绪的驱使下所写出的文章,都是满满的负能量,毫无实际价值,但是它至少让我『输出个人价值观』的欲望得到了充分的满足,所以,感谢每一位读了它的朋友。
谢谢。