/** * Copyright (c) 2014,www.easygame.org * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the easygame.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY EASYEGRET.COM AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL EGRET-LABS.ORG AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ class Main extends egret.DisplayObjectContainer { /** * 加载进度界面 * Process interface loading */ private loadingMain:virus.LoadMianProgressMainBar;//loading main //RES资源全部下载完成 private loadResAllComplete:boolean = false; //easy game的配置文件时候下载完成 private _isEasyGameOk:boolean = false;//游戏配置下载完毕 private _isSoundOk:boolean = false;//声音准备完毕 private _isProjectUIOk:boolean = false;//公用UI下载完毕 private _isCreateScene:boolean = false//是否已创建场景 private _isLoadingViewOk:boolean = false;//view的loading是否准备好了 private _progressCalculate:easy.ProgressCalculate = null; private _isViewEnter:boolean = false;//第一个加载的view是否已经准备完成 public constructor() { super(); this.loadResAllComplete = false; this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this); } private onAddToStage(event: egret.Event) { egret.ImageLoader.crossOrigin = "anonymous"; //初始化全局数据,以便Heatbeat可以使用 easy.GlobalSetting.initData(); //初始化Resource资源加载库 easy.ResManager.loadConfig(easy.GlobalSetting.CDN_RES + "loading_main.json", ["loading_main"], this.onResLoadingMianComplete,this); //下载loading view的内容 easy.ResManager.loadConfig(easy.GlobalSetting.CDN_RES + "loading_view.json", ["loading_view"], this.onResLoadingViewComplete,this); easy.EventManager.addEventListener(easy.EventType.VIEW_ENTER, this.onHiddenloadingMain, this); } /** * loading view配置文件的加载完成 * @param event */ private onResLoadingViewComplete(event:RES.ResourceEvent):void{ this._isLoadingViewOk = true; } /** * loading main配置文件的加载完成 * @param event */ private onResLoadingMianComplete(event:RES.ResourceEvent):void{ //console.log("@Main onLoadingMianResourceLoadComplete=" + event.groupName); if(RES.isGroupLoaded("loading_main")){ //设置加载进度界面 this.loadingMain = new virus.LoadMianProgressMainBar();//loading main this.stage.addChild(this.loadingMain); this.loadingMain.width = easy.GlobalSetting.DISPLAY_WIDTH; this.loadingMain.height = easy.GlobalSetting.DISPLAY_HEIGHT; this.loadingMain.enter(); //启动进度条计数 this._progressCalculate = new easy.ProgressCalculate(10); easy.HeartBeat.addListener(this,this.onHbProgress,2); //初始化Resource资源加载库 easy.ResManager.loadConfig(easy.GlobalSetting.CDN_RES + "resource.json", ["group_easygame_config"], this.onResLoadGameConfigComplete, this); //提前加载Json数据,创建场景的时候,可能就需要用到数据了 //virus.DataManager.loadJsonFile(); //加载公用资源,如果设置有公用资源请打开此项 //easy.ResManager.loadResFile("virus"); //easy.EventManager.addEventListener(easy.EventType.PROJECT_RES_DOWNLOADED, this.onProjectResDownloaded, this); this._isProjectUIOk = true; } } /** * 控制进度条 * @type {number} */ private onHbProgress():void{ var progress:number = this._progressCalculate.progress(); this._progressCalculate._progressSpeedUp = (this.loadResAllComplete && this._isProjectUIOk && this._isViewEnter); this.loadingMain.setProgress(progress,100); if (this.loadResAllComplete && !this._isCreateScene && this._isLoadingViewOk) this.createScene(); if (progress == 100) { easy.HeartBeat.removeListener(this, this.onHbProgress); this.removeLoadingUI(); } } /** * 将loading页面移除,开始创建场景 */ private removeLoadingUI():void{ if (this.loadingMain) { this.loadingMain.outer(); } } /** * 公用资源加载完成的通知 * @param myEvent */ private onProjectResDownloaded(myEvent:easy.MyEvent):void { easy.EventManager.removeEventListener(easy.EventType.PROJECT_RES_DOWNLOADED, this.onProjectResDownloaded, this); this._isProjectUIOk = true; this.checkAllResourceLoaded(); } /** * preload资源组加载完成 */ private onResLoadGameConfigComplete(event:RES.ResourceEvent):void { //console.log("@Main onResourceLoadComplete=" + event.groupName); if(RES.isGroupLoaded("group_easygame_config")) { this._isEasyGameOk = true; //下载全部完成 //设置帧频 easy.GlobalSetting.FRAME_RATE = 60; //EasyGame初始化 easy.EasyGame.init(); //设置界面切换的loading,view的loading和Win的loading可以设置成不一样的类 easy.ViewManager.defaultLoadingClass = virus.LoadViewProgressViewBar;//loading view easy.PopupManager.defaultLoadingClass = virus.LoadViewProgressViewBar;//loading view } this.checkAllResourceLoaded(); } /** * 声音加载完成 */ private onResLoadSoundComplete(event:RES.ResourceEvent):void { //console.log("@Main onResourceLoadComplete=" + event.groupName); if(RES.isGroupLoaded("sound")) { this._isSoundOk = true; //声音加载完毕,播放背景音文件 //easy.Sound.play("sound_bg", 0 , 0); } } /** * 检测是否所有需要的资源全部加载完成 * 下载全部完成的情况下设置loadAllComplete标志,等待loading的全部反应 */ private checkAllResourceLoaded():void { if(this._isEasyGameOk && this._isProjectUIOk){ //创建场景 if (easy.GlobalSetting.APP_STORAGE == easy.GlobalSetting.STORAGE_NET || easy.GlobalSetting.APP_STORAGE == easy.GlobalSetting.STORAGE_LOCAL_NET){ this.loadDataFromNet(); } else{ this.loadResAllComplete = true; } } } /** * 隐藏加载进度条 */ private onHiddenloadingMain(myEvent:easy.MyEvent):void { this._isViewEnter = true; easy.EventManager.removeEventListener(easy.EventType.VIEW_ENTER, this.onHiddenloadingMain, this); //声音加载 //easy.ResManager.addGroupCompleteListener("sound", this.onResLoadSoundComplete, this); } /** * 需要从网络初始化信息 */ private loadDataFromNet():void { //TODO 这里填写需要网络加载的信息,完成后,请调用loadDataFromNetComplete()方法,加载主场景 //this.loadDataFromNetComplete(); } /** * 从网络加载初始化信息完成 */ private loadDataFromNetComplete():void { //TODO 网络信息的初始化,请在这里填写 this.loadResAllComplete = true; } /** * 创建场景 */ private createScene():void{ if (this._isCreateScene) return;//防止多次创建 this._isCreateScene = true; //console.log("main.createScene") //TODO 提前预设空闲下载,加快后续的模块载入速度 easy.ResManager.addIdleDownload(virus.temp_gameTemplate); easy.ResManager.addIdleDownload(virus.temp_rankTemplate); //TODO 动画的预加载方式 //easy.AnimateManager.getAnimateData("need_to_download_name"); //TODO 切换到第一个主场景 virus.GameData.get_rank(1); easy.ViewManager.show(virus.HallView, null, false); } }