egret-docs-master/extension/RES/loadGroup/README.md

67 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2024-06-19 13:32:32 +08:00
## 一、预加载资源组
在配置文件加载完成后我们可以调用RES.loadGroup(name:string,priority:number=0)开始预加载配置中的一组资源。该函数需要两个参数,参数"name"对应配置文件中的资源组名。预加载可以在游戏启动时,也可以是某个面板被打开前,调用时机由具体项的目逻辑确定。代码如下:
```
RES.addEventListener( RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this );
RES.addEventListener( RES.ResourceEvent.GROUP_PROGRESS, this.onResourceProgress, this );
RES.addEventListener( RES.ResourceEvent.GROUP_LOAD_ERROR, this.onResourceLoadErr, this );
RES.loadGroup( "preload" );
```
事件对应的资源组
这里需要注意组加载事件回调函数里的写法需要使用event.groupName判断下这个事件是属于哪个资源组因为可能有多个资源组同时在加载。示例代码如下
```
private onResourceProgress( event:RES.ResourceEvent ):void {
if( event.groupName=="preload" ){
this.loadingView.setProgress( event.itemsLoaded,event.itemsTotal );
}
}
```
资源组加载失败处理
由于网络等原因可能造成资源加载失败这种情况下将会派发GROUPLOADERROR事件可以在事件处理中重新加载资源
```
private onResourceLoadErr( event:RES.ResourceEvent ):void {
RES.loadGroup( event.groupName );
}
```
在复杂的网络环境,可能会出现多次加载失败,这时我们可能需要在一定的失败次数之后停止加载,因为可能网络已经失去连接,那么我们可以通过对加载失败次数进行计数。 假设有一个成员countGroupError用来计数加载失败次数其初始值为0则处理函数修改为
```
private onResourceLoadErr( event:RES.ResourceEvent ):void {
if( ++this.countGroupError < 3 ){
RES.loadGroup( event.groupName );
}else{
/// 弹出网络失去连接提示等
}
}
```
对于多个资源组同时加载的情况countGroupError可以使用一个以groupName为键的哈希数组来记录每个资源组的加载失败次数。
同时进行多资源组加载时的优先级控制
若同时启动多个资源组一起加载,比如在加载"preload"前,我们希望先加载一个更小的"loading"资源组,以提供显示"preload"组加载进度的素材可以使用RES.loadGroup()的第二个参数,为"loading"组传入一个优先级更大的数字来迫使loading组在preload前加载完成代码如下
```
RES.loadGroup("loading",1);
RES.loadGroup("preload",0);
```
## 二、运行时动态创建资源组
若资源组无法预先配置在文件中需要运行时才能动态确定的我们可以通过调用RES.createGroup(groupName:string,keys:Array)方法,动态创建一个资源组,再加载它。
groupName是要创建的资源组组名。
keys这个资源组包含的资源列表。里面的key对应配置文件里的name属性或一个资源组名若key是资源组名将类似合并资源组的功能。你可以同时传入多个已存在资源组名合并成一个新资源组。
动态创建资源组之后调用loadGroup()一次加载完。
注意createGroup()方法是基于已存在的配置属性操作的调用这个方法前请先确认RES的配置文件已经加载完成了。也就是在监听到ResourceEvent.CONFIG_COMPLETE事件之后。