加载文本和二进制文件
Egret 加载资源主要使用 egret.HttpRequest
类。该类封装了在异步加载资源和通讯方面作为 H5 标准的 XMLHttpRequest
对象。
本节讲解的主要是加载静态文件,分为两种类型:文本和二进制数据。 加载静态文件的特点是可以进行进度跟踪。
1.加载文本
HttpRequest
对象最核心的方法就是 open()
和 send()
。 open()
方法接收该请求所要访问的URL。 作为可选项还可以传入加载方式,这个参数通常用 HttpMethod
取常量,默认是最常用的 GET 方式。
在加载完成时,通过 HttpRequest
对象的 response
属性来获取返回的数据。
加载文本数据的方法如下:
const url = "resource/config/description.json";const request: egret.HttpRequest = new egret.HttpRequest();const respHandler = function (evt: egret.Event): void {switch (evt.type) {case egret.Event.COMPLETE:const request: egret.HttpRequest = evt.currentTarget;console.log("respHandler:n", request.response);break;case egret.IOErrorEvent.IO_ERROR:console.log("respHandler io error");break;}};const progressHandler = function (evt: egret.ProgressEvent): void {console.log("progress:", evt.bytesLoaded, evt.bytesTotal);};request.once(egret.Event.COMPLETE, respHandler, null);request.once(egret.IOErrorEvent.IO_ERROR, respHandler, null);request.once(egret.ProgressEvent.PROGRESS, progressHandler, null);request.open(url, egret.HttpMethod.GET);request.send();
HttpRequest
默认的加载类型是 TEXT ,因此不需要专门设定。
需要侦听的主要事件是 COMPLETE
,从这里获取数据。
要考虑意外的情况,在 IO_ERROR 做这些情况的处理。
加载进度事件是 ProgressEvent.PROGRESS
, 在加载内容较大的资源时比较有用。
2.加载二进制
加载二进制数据的方法如下:
const url = "resource/assets/egret_icon.png";const request: egret.HttpRequest = new egret.HttpRequest();request.responseType = egret.HttpResponseType.ARRAY_BUFFER;const respHandler = function (evt: egret.Event): void {switch (evt.type) {case egret.Event.COMPLETE:const request: egret.HttpRequest = evt.currentTarget;const ab: ArrayBuffer = request.response;console.log("respHandler:n", ab.byteLength);break;case egret.IOErrorEvent.IO_ERROR:console.log("respHandler io error");break;}};request.once(egret.Event.COMPLETE, respHandler, null);request.once(egret.IOErrorEvent.IO_ERROR, respHandler, null);request.open(url, egret.HttpMethod.GET);request.send();
加载二进制数据,先设置 HttpRequest
的加载类型为 ARRAY_BUFFER
。
数据加载完成后可从 response
属性取到 ArrayBuffer
对象,即可进行进一步读取操作。
通过
URLLoader
构建通信请求请访问: URLLoader网络通讯URLLoader
类已移动到 game 扩展库中。