three.js 源码分析 之 LoadingManager

2020-11-03 10:47:44 浏览数 (1)

代码语言:javascript复制
LoadingManager是一个下载过程中记录、下载完成情况类,当three.js中的一些文件被下载时通过设置LoadingManager可以及时获取当前文件列表中的下载进度
//正在加载的文件管理
     function LoadingManager( onLoad, onProgress, onError ) {
         //设置域
         var scope = this;
         //当前状态为未加载
         var isLoading = false;
 
         var itemsLoaded = 0;
         var itemsTotal = 0;
         var urlModifier = undefined;
        // Refer to #5689 for the reason why we don't set .onStart
         // in the constructor
         //设置回调状态
         this.onStart = undefined;
         this.onLoad = onLoad;
         this.onProgress = onProgress;
         this.onError = onError;
        //单项开始了
         this.itemStart = function ( url ) {
             //下载项总数增加
             itemsTotal   ;
             //如果当前没有下载
             if ( isLoading === false ) {
                 //设置当前开始下载
                 if ( scope.onStart !== undefined ) {
                     //开始下载回调,当前下载的url,当前下载的完的数量,当前下载的总数
                     scope.onStart( url, itemsLoaded, itemsTotal );
                }
            }
             //设置正在下载状态
             isLoading = true;
        };
        //单项结束了
         this.itemEnd = function ( url ) {
             //下载完成,完成数增加
             itemsLoaded   ;
             //设置当前处理完成回调
             if ( scope.onProgress !== undefined ) {
                 //开始下载回调,当前下载的url,当前下载的完的数量,当前下载的总数
                 scope.onProgress( url, itemsLoaded, itemsTotal );
            }
            //总数和下载完成数相同 
             if ( itemsLoaded === itemsTotal ) {
                 //重置下载状态
                 isLoading = false;
                 //回调下载完成回调
                 if ( scope.onLoad !== undefined ) {
 
                     scope.onLoad();
                }
            }
        };
        //单项出现错误了
         this.itemError = function ( url ) {
             //错误回调
             if ( scope.onError !== undefined ) {
                scope.onError( url );
            }
        };
        //设置url解析中间过程
         this.resolveURL = function ( url ) {
            if ( urlModifier ) {
                return urlModifier( url );
            }
            return url;
        };
        //设置url中间转换过程
         this.setURLModifier = function ( transform ) {
            urlModifier = transform;
             return this;
        };
    }

0 人点赞