新手问答


1. Egret 引擎 是什么?

Egret引擎是一款使用TypeScript语言构建的开源免费的移动游戏引擎。Egret仅是纯粹的使用TypeScript语言来开发游戏,开发后可以使用Egret来打包为HTML5网页游戏和Android,iOS,WinPhone原生游戏。

您可以通过访问Egret官方站点了解更多信息。


2. TypeScript是什么

TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。

TypeScript扩展了 JavaScript 的句法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作。TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性。

以上内容节选自维基百科


3. 为什么Egret采用TypeScript语言开发

TypeScript是遵循 下一代 ECMAScript 标准( ES6 )的编程语言,而ES6同时也是JavaScript2规范,它通过强类型等更严格的语法检查机制来保证大型项目的可维护性,并且在未来可以无缝过渡到浏览器原生支持的JavaScript2。与此同时,由于 TypeScript 和 Flash ActionScript 3.0 的高度一致性,Egret采用 TypeScript开发也能保证 Flash开发者的最低的迁移成本。


4. Egret中如何加入广告

Egret提供了一些第三方广告的接入方案,具体请参考这里


5. TypeScript 和 JavaScript 有什么区别

TypeScript是JavaScript的超集,两者语法上不同。但TypeScript编译后会编译为JavaScript代码。


6. 采用TypeScript作为开发语言,调试时是调试TypeScript还是JavaScript ?

在默认情况下是 JavaScript ,也可以通过在 tsc 中添加 --sourcemap 参数来创建映射文件,浏览器会对其自动加载、自动解析,实现可以调试TypeScript的功能


7. 我完全不了解Div/CSS等知识,如何使用Egret开发

Egret并不是使用 Div/CSS 来进行绘制,而是将全部元素绘制到一个Canvas上,几乎全部元素都显示在这个Canvas中,所以开发人员完全无需了解Div/CSS的知识。


8. Egret跟JQuery是类似的吗,能用来开发网页吗?

Egret是一个跨平台游戏框架,与JQuery等操作HTML标签的网页框架不是同一类型。Egret所有的代码都在一个Canvas区域内绘制呈现,并不操作任何HTML标签或CSS,所以不适用于网页开发。

在这个问题上下文中,开发者可以把 Egret 假想成就是一个 Flash,以更方便的对此进行理解。

“ Flash 和 JQuery是类似的么?可以用来开发网页么?”就可以很容易的得出同样的结论,虽然基于 Flash的全站是可以实现,并在数年前是一项流行技术,但是采用 Web标准的开发网页目前已经成为了最主流、也是最方便的方式。


9. Egret 采用的 BSD 协议对开发者有什么限制?

参考 Egret Public Beta ReleaseNote对此的说明:

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。 BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

简单说,开发者可以随意使用Egret代码,允许任意修改、重新发布、开发商业软件,唯一的限制是必须保留 Egret-Labs 的版权信息,不允许将 Egret代码中置于顶部的版权信息( Egret-Labs )进行随意修改或将其删除。


10. AS3-TS Conversion Tool 是否意味着 Flash游戏能通过工具转换直接移植成 Egret游戏?

答案是否定的。这个工具不是编译器,只是做简单的语法转换,并不保证转换后的代码100%能运行。因为语言特性和底层API限制,Egret无法做到跟Flash 100%兼容。所以开发者仍然需要学习Egret和TypeScript语法,尤其要注意跟Flash/AS3不兼容的地方。提供此工具主要是为了:快速将AS3里可复用的大量类库代码迁移到基于Egret的TypeScript代码。简而言之它是一个解决体力活的工具。将绝大部分有规律的语法转换都自动完成(例如自动给变量加上this关键字,转换基本数据类型等),剩下很小一部分报错借助IDE提示,手动调整即可。在迁移AS3类库过程中,使用此工具能节约大量的时间。


11.我是一名JavaScript开发者,完全不了解 TypeScript语言,请问Egret可以直接用JS写游戏么?

可以,但是 Egret 建议开发者在处理中大型项目时 使用 TypeScript 编写,以更好的维护代码质量


12.Egret官方已经修复的问题,我应该如何更新?

下载Egret的新版本,或者使用 git pull 来更新引擎代码 在命令行中 进入 egret 目录,执行 npm install -g 重新安装 Egret 重新编译你的项目,执行egret build {your_project} -e 注意,更新 egret 后请务必不要忽略 -e参数,此命令是在构建项目的同时编译一次引擎代码


13.如何规避this引用错误引起的Bug?

答:和Flash中this总是指向实例自身不同,JavaScript的this指向可能会发生变化,因为Egret是使用TypeScript,而TypeScript最终编译为JavaScript,所以开发者也要是否小心this指向引起的问题。(说明文档)

规避方式是,仔细阅读Egret的文档说明,需要传递this的地方就不能偷懒,比如addEventListener方法;官方禁止的方法也不要使用,比如setTimeout和setInterval,这两个方法的回调函数里this也会失效,请使用Egret的Ticker和Timer来代替。


14. Android APP打包出现问题,怎么办?

此类问题一般由版本不匹配和打包方式不对引起。在打包Android APP前,确认Egret引擎以及工具链均为最新版本。Egret引擎升级方法可以参考这里

Android APP打包方法请参考这里

一些特殊情况,请在我们的Egret社区发问题帖求助。


15. 屏幕适配策略是怎么样的?

关于Egret的屏幕适配策略,我们有详细的教程,请查看这里


16. Egret发布后怎么弄?

Egret发布过程中会对代码进行压缩和混淆,具体发布教程请参考这里


17. Egret的音频貌似在移动设备上有问题?不能自动播放,怎么办?

很多移动系统,例如iOS都对HTML5音频功能进行了限制,有一些无法避免的规则,处理方法请参考这里


18. 我做了一个小游戏,想用微信分享怎么办?

微信具有默认的分享功能,如果需要进行高级功能如自定义分享,需要使用微信官方的JS SDK,具体使用方法参考这里


19. 如何在移动设备中获取重力感应事件

获取方法请参考这里


20. Egret默认帧频是60FPS,我想设置为30FPS,如何操作?

官方并不推荐修改帧频,如果想自己设置帧频,并且确保Egret引擎版本在2.0 RC2以后,则在程序中可以访问stage的位置,设置stage.frameRate即可!

如果仍在使用2.0 RC2之前版本,请参考这里


21. 为什么Egret开发的游戏在某些Android设备上特别卡?

在 Android 早期版本( 4.4 之前) ,Android WebView 并不 100% 支持 HTML5 特性,如 WebGL、PageVisibility 、 WebSocket 等。

Google 为了解决这些问题,在 4.4 版本中,完全删除了原有的 WebView ,将其替换为了 chromium 架构的新 WebView。

由于这个修改的工作量过大,在部分特性在尚未全部完成的情况下,Android 就发布了 4.4.2 版本作为过渡,这导致了部分特性在 4.3版本是存在的,但是4.4.2 反而丢失了。 其中我们遇到的情况就是 Canvas 硬件加速特性丢失。

在 Android 4.4.4 版本中,google 完全完成了 WebView的架构迁移,Canvas硬件加速特性被重新置入 WebView中。

由于 HTML5 游戏依赖于 Canvas 渲染,而是否存在硬件加速对渲染结果有几十倍的差异,所以 HTML5游戏在 Android 4.4.2 系统上卡顿的问题由于操作系统限制,几乎不可能在应用层解决。


22. egret支持indexDb或websql么?最主要的是然后打包app之后还支持么?记得貌似说过没有内嵌webview。

可以使用 egret.localStorage。


23. 我们需要在我们自己的app里面 使用一个webview加载本地一个egret做的html页面。

Egret引擎运行的项目都是基于web的,也就是都需要通过访问web服务器的方式来加载页面及资源,所以这种方式是无法通过Egret来实现的。


24. 跨域问题如何解决?

浏览器发送请求时调用的是  AJAX,即 XmlHttpRequest 时,服务器端需要设置一个 Header ,这个原理类似 Flash 的跨域策略文件,将 ResposneHeader 中添加  'Access-Control-Allow-Origin': '*' ,具体的添加方式和你的后端语言有关。

注意:在要发布的正式产品中,强烈不建议改为 * ,而应该改为你的正确的域。



25. 性能面板的cost四个参数代表什么意思?

每帧的更新包含两大部分,分为程序运行消耗和图形渲染消耗。

1)EnterFrame Cost:逻辑运算消耗,就是当前帧所有代码运行的消耗。

2)UpdateTransform Cost:几何变形消耗,游戏中几乎每帧都有显示对象的几何状态发生变化,包括位移、缩放和旋转,这部分当然也是程序运算,具体可参考:参考文档

3)Engine Draw Cost:引擎渲染消耗,这部分主要用于引擎本身渲染。

4)HTML5 Canvas Draw Cost:HTML5Canvas渲染消耗,与引擎本身渲染不同,H5级别也有渲染方面的工作。


26.Egret Developer Networks开发者内容协议

阅读地址:开发者内容协议



27.请问Egret Runtime和Egret Android Support有什么区别?

底层一样,使用场景不一样。
简单说Runtime用于接入渠道,通过开放平台来接入渠道;Support用于打包原生App。



28.请问为什么需再touch 里面激活一次才能正常播放呢?

这是移动设备的系统对h5声音权限控制的差异造成的。请参看论坛贴 关于Egret框架入门第一步 - 声音的问题


29.为何白鹭要开发自己的IDE,而不直接采用现有的其他IDE?

现有的IDE都只对泛TypeScript/JavaScript开发提供支持,目前还没有一款针对Egret项目类型专门优化的IDE,开发者在使用现有IDE编写过程中会有诸多不便,例如:监听事件时无法智能提示对象包含的事件类型;TS没有提供标准的API注释规范,类和接口继承关系的注释全都无法显示等。另外,现有IDE也无法与EXML可视化编辑很好的集成。而自主研发的IDE,能够完美结合现有的可视化工作流与TS代码编辑过程,深度定制各种便捷功能,如:一键从皮肤生成TS逻辑代码,自动从可视化设计面板生成事件监听代码等。从而极大提升用户开发效率。





评论


nodephp:目前 Egret 在4.4.2 webscoket 支持如何
06月09日 16:10
ifyx:回复 nodephp 这个主要看系统对于html5 websocket的支持。 4.4.2应该没什么问题。
06月10日 09:35
RiverX:官方的很多类和方法都找不到 ,这个让人很着急呀
08月09日 22:59
T-boy:JS应该是解析型脚本,为什么还要编译呢?这不像as3,JS应该是很编写好久能马上运行的。。。
10月16日 10:49
东北大客:回复 T-boy TypeScript 要编译成 JavaScript
12月14日 09:33