1.简述
受限于同源策略。egret在加载跨域素材时,极大的受限。如,canvas下无法二次draw跨域图片,webgl下,无法显示跨域图片,想把资源放到cdn上,但是又没有同域cdn,等等一系列问题。
哦,对了,还有,release出来的文件,无法直接双击运行(需要http服务器才能运行)。
2.实现原理
原理是js文件不受同源策略限制。利用jsonp我们就可以把所有非js/css的资源,转成js文件(图片转base64),由egret加载并解析。
本方案提供转js脚本工具,用于将所有素材转换为js文件。
同时提供针对egret的解析库,通过Analyzer注入。完全不影响现有的工作流。
3.操作步骤
a.在egret项目中引入CrossdomainLib.ts和AssetAdapter.ts2个库文件(见后面示例附件)
b.修改index.html文件如下:
<script> //是否开启跨域支持,只建议在release版本中开启 var needCross = false; var resourcePath = 'http://www.nofastfat.com/h5/test/crossdomainSource/';//读CDN等跨域资源 // var resourcePath = '';//读本地资源 egret.runEgret({renderMode:"webgl"}); </script>
c.修改Main.ts文件如下,根据各个项目不同,可能略有差异,重点就是使用AssetAdapter管理素材,和使用 startCross(this.stage, true, window['resourcePath']); 开启跨域支持
public constructor() { super(); this.once( egret.Event.ADDED_TO_STAGE, this.__addedHandler, this ); } private __addedHandler( e: egret.Event ): void { if ( !egret.Capabilities.isMobile ) { this.stage.scaleMode = egret.StageScaleMode.SHOW_ALL; this.stage.orientation = egret.OrientationMode.AUTO; } this.stage.registerImplementation( "eui.IAssetAdapter", new AssetAdapter() ); var vc: RES.VersionController = new RES.VersionController(); vc.getVirtualUrl = function ( url: string ): string { return url + '?v=' + '0.0.1'; } RES.registerVersionController( vc ); //绕开egret同域策略的关键代码,只建议在release后,设置needCross = true,以便跨域生效 if(window && window['needCross']){ startCross(this.stage, true, window['resourcePath']); } this.startLoadSource(); }
d.发布你的项目
e.安装脚本工具(见附件,安装一次即可):修改installScript.cmd中INSTALL为你的egret安装目录,然后双击该文件,即可安装成功
f.在发布的release项目目录下打开cmd命令行工具,并输入 egret crossdomain(如提示找不到该命名,请返回上一步骤重新安装)。此时所有需要的跨域资源已经自动生成。
e.修改release目下index.html中的设置,needCross为true,并根据需要设置跨域素材的位置,如果是加载本地资源,则设置为空。
如果需要放置资源到CDN上,则复制完整的resource目录到cdn,如下图(下图为测试用http服务器的目录结构,对应:http://www.nofastfat.com/h5/test/crossdomainSource/),并设置resourcePath为对应的URL地址。
f.操作结束,你会发现,修改处理后的html文件不仅可以直接双击访问,还可以访问跨域CDN上的资源。
4.写在最后
a.由于使用base64转图片,性能会有一定损耗,因此不建议在中大型游戏上使用。
b.该工具并没有经历上线项目检验。 (2017-4.17 更新:经过多位朋友QQ反馈,本工具已经历不同的上线项目,基本稳定)
c.引擎版本最高支持到3.2.6。4.0由于Analyzer兼容行问题,暂不支持(2017-4.17 更新:经过实测,由于4.0.3版本对RES的保留,依旧可用,目前版本可支持到4.0.3)
d.使用本工具可以衍生出很多玩法,比如使用apicloud等工具可以在线打包出ipa和apk文件(而不用去到native上各种悲催)。使用C#打壳在windows桌面上跑(electron打包有100M+),等等玩法。(2017-4.17 更新:经过本人实际使用,建议使用HBuilder+htmlplus框架打包app,稳定高效,本地api丰富)
当项目中有fnt位图字体时,会有BUG,需要做如下处理
1.*.fnt文件中, {"file":"/fnt.png",中的斜杠(/)一定要去掉,一定要去掉,位图字体工具的坑
2.不要在default.res.json中手动加载fnt.png文件,因为*.fnt文件自己就会加载对应的fnt.png文件
相关推荐
解决跨域问题的方法有多种,主要包括以下几种: 1. **CORS(Cross-Origin Resource Sharing)**:这是一种现代浏览器支持的跨域方式,服务器通过设置响应头`Access-Control-Allow-Origin`来指定哪些源可以访问其...
Egret 3.0 是一个强大的HTML5游戏开发框架,专为构建高性能、跨平台的游戏应用而设计。...EgretAir-master文件可能是这个解决方案的一个实例,通过研究它,我们可以更好地掌握Egret 3.0的开发实践。
【EgerAir:Egret的移动端解决方案】 EgerAir 在压缩包文件名中提及,它是Egret针对移动设备推出的一个重要组件。EgerAir集成了Egret Engine,并且添加了对原生功能的封装,如推送通知、本地存储、硬件加速等,使得...
在本文中,我们将深入探讨如何在Egret游戏引擎中创建一个下拉框。Egret是一个基于TypeScript的2D游戏开发框架,它提供了一套完整的开发工具链,包括编辑器、编译器和运行时环境,适用于移动和桌面平台。 首先,我们...
Egret开发游戏屏幕适配解决方案,适配不同分辨率,两种适配模式。 适配库是基于Egret的屏幕适配策StageScaleMode.NO_BORDER开发,采用NO_BORDER是因为他没有黑边,而且游戏内容是等比例拉伸。可以把NO_BORDER理解为...
10. **社区与文档**:Egret有一个活跃的开发者社区,提供了丰富的教程、示例和API文档,方便开发者快速上手和解决问题。 通过对"balls"这个文件的猜测,我们可能能够了解到如何在Egret中实现球体的碰撞检测、运动...
Egret 是一个强大的开源...这个实例库提供了从基础到进阶的全面示例,无论是想要学习Egret的新手,还是寻求灵感和解决方案的开发者,都能从中受益。通过实际操作这些代码,可以加深对Egret框架的理解,提高开发技能。
最后,Egret社区活跃,拥有大量的教程、示例和插件,开发者可以通过参与社区交流,获取最新资讯和解决方案,加速自己的学习进程。 总的来说,Egret引擎是HTML5游戏开发的一个强大选择,通过深入学习“Egret HTML5...
这个文件很可能是关于Egret Engine v5.4.1的使用指南或说明文档,包含了安装步骤、API参考、常见问题解答等内容,是初学者入门和解决问题的重要参考资料。 总的来说,Egret Engine v5.4.1提供了全面的游戏开发工具...
本库旨在为Egret封装常用的手势操作,因本人能力有限,有的实现并不完善,欢迎批评指正。Egret手势识别库egret_gesture目前已实现的手势: 1. Tap(点一下) 2. Double Tap (双击) 3. Pinch(二指往內或往外拨动,平时...
Egret 提供了完整的解决方案,包括编辑器、引擎、构建工具以及社区支持,帮助开发者高效地创建高质量的跨平台游戏。 在这款名为 "22_游戏egret" 的项目中,我们可以看到几个关键文件: 1. **index.html**:这是...
Egret是一个基于HTML5的开源游戏开发框架,它提供了一整套完整的2D和3D游戏开发解决方案,包括图形渲染、动画系统、事件处理以及音频管理等。在这个项目中,"120-media-audio"可能是一个示例或教程,专门讲解如何在...
Egret Core 是一款基于 TypeScript 开发的2D游戏开发框架,它为开发者提供了高效、便捷的游戏开发工具链。这个压缩包包含的是Egret官方提供的示例代码,可以帮助开发者理解和学习如何使用Egret Core 进行游戏开发。 ...
Egret游戏引擎是一款广泛应用于开发2D游戏的开源框架,其强大的功能和高效性能使得开发者能够轻松构建高质量的游戏。在Egret引擎中,P2 Physics是一个重要的组件,它为游戏提供了物理模拟的支持,使游戏对象能够表现...
Egret 引擎是一款强大的 HTML5 游戏开发框架,由白鹭时代公司推出,它提供了全面的 2D 游戏开发解决方案。这个“egret弹珠游戏源码”是一个利用Egret引擎构建的弹珠小游戏,非常适合开发者进行学习和参考。下面将...
Egret 是一个强大的HTML5游戏开发框架,它提供了一套完整的解决方案来帮助开发者构建高性能的2D和3D游戏。"egret摄像机移动"这个主题涉及到的是在Egret中如何操纵游戏场景中的摄像机,让玩家可以观察和跟随游戏世界...
EgretWing-v3.2.6
Egret Engine是一个基于TypeScript语言的游戏开发框架,它提供了一个全面的解决方案,包括渲染引擎、资源管理、事件系统、动画系统、网络通信以及游戏开发工具链等。由于TypeScript是JavaScript的超集,因此开发者...
7. **调试和优化工具**:Egret Workbench 是 Egret 的官方集成开发环境,提供了一整套的调试和性能分析工具,帮助开发者找出并解决问题。 在这个测试游戏中,我们可以通过查看源代码来学习如何利用 Egret 引擎实现...
- 通过分析压缩包中的小游戏源代码,可以学习到实际项目中的编码规范、架构设计和问题解决策略。 - Egret官方文档提供了详细的API参考和教程,帮助开发者快速入门。 - 在线社区和论坛,如Egret开发者社区,是获取...