SceneManager.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import LoadingView from "../loadingView/LoadingView";
  2. export default class SceneManager
  3. {
  4. private __assetBundleName:string;
  5. private __sceneName:string;
  6. private __switching:boolean;
  7. private get assetBundle():cc.AssetManager.Bundle{
  8. return cc.assetManager.getBundle(this.__assetBundleName);
  9. }
  10. /**
  11. * 切换场景
  12. * @param sceneName
  13. */
  14. Swicth(assetBundle:string,sceneName:string):void{
  15. LoadingView.single.Show();
  16. this.__assetBundleName=assetBundle;
  17. this.__sceneName=sceneName;
  18. this.__switching=true;
  19. if(this.assetBundle==null){
  20. cc.assetManager.loadBundle(this.__assetBundleName,this.OnAssetBundleLoadComplete.bind(this));
  21. }else{
  22. this.LoadScene();
  23. }
  24. }
  25. private OnAssetBundleLoadComplete(err:Error,asset:cc.AssetManager.Bundle):void{
  26. if(err){
  27. throw new Error("加载资源包出错:"+this.__assetBundleName);
  28. }else{
  29. this.LoadScene();
  30. }
  31. }
  32. private LoadScene():void{
  33. this.assetBundle.loadScene(this.__sceneName,null,this.OnProgressHandler,this.OnCompleteHandler);
  34. }
  35. private OnProgressHandler(finish: number, total: number, item: cc.AssetManager.RequestItem):void{
  36. LoadingView.single.UpdateProgress(finish/total);
  37. }
  38. private OnCompleteHandler(error: Error, sceneAsset: cc.SceneAsset):void{
  39. if(error!=null){
  40. throw new Error("场景加载错误:"+this.__sceneName);
  41. }
  42. cc.director.runScene(sceneAsset);
  43. LoadingView.single.Hide();
  44. }
  45. private static instance:SceneManager;
  46. public static get single(){
  47. if(this.instance==null){
  48. this.instance=new SceneManager();
  49. }
  50. return this.instance;
  51. }
  52. }