cocos creator 场景加载工具类 GSceneUtil
一个加载场景的管理类
-
addPersistRootNode(node: cc.Node) // 设置常驻结点
-
removePersistRootNode(node: cc.Node) // 删除常驻结点
-
loadSceneNormal(sceneName: string, cb?: Function) // 普通加载场景
-
loadSceneWithProgress(sceneName: string, cb?: Function)// 带进度条加载场景
-
setLoadingDisplay() // 设置加载动画
-
setResolutionPolicy()// 设置屏幕大小
import loading from "./loading"
class GSceneUtil {
public static readonly Instance = new GSceneUtil();
private rootNode: cc.Node = null;
constructor() {
}
public addPersistRootNode(node: cc.Node) {
if(cc.game.isPersistRootNode(node)) {
return ;
}
cc.game.addPersistRootNode(node);
this.rootNode = node;
}
public removePersistRootNode(node: cc.Node) {
if(cc.game.isPersistRootNode(node)) {
cc.game.removePersistRootNode(node);
}
}
public loadSceneNormal(sceneName: string, cb?: Function) {
cc.director.loadScene(sceneName, cb);
}
public loadSceneWithProgress(sceneName: string, cb?: Function) {
this.doLoadSceneWithProgress(sceneName, cb);
}
private setLoadingDisplay() {
if(this.rootNode == null) return ;
this.rootNode.getComponent(loading).onShow();
(cc.loader as any).onProgress = (completedCount, totalCount, item) => {
let percent = 100 * completedCount / totalCount;
let str = percent.toFixed(2) + '%';
this.rootNode.getComponent(loading).onChangeScene(str);
};
cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, () => {
this.rootNode.getComponent(loading).onHide();
});
}
private doLoadSceneWithProgress(sceneName: string, cb?: Function) {
this.setLoadingDisplay();
cc.director.preloadScene(sceneName, () => {
cc.director.loadScene(sceneName, cb);
});
}
public setResolutionPolicy() {
let f = function () {
cc.log('手机场景适配');
cc.view.setDesignResolutionSize(640, 1280, cc.ResolutionPolicy.FIXED_WIDTH);
cc.Canvas.instance['alignWithScreen']();
/* if (cc.sys.isMobile) {
cc.log('手机场景适配');
cc.view.setDesignResolutionSize(640, 1280, cc.ResolutionPolicy.FIXED_WIDTH);
cc.Canvas.instance['alignWithScreen']();
} else {
cc.log('电脑场景适配');
cc.view.setDesignResolutionSize(640, 1280, cc.ResolutionPolicy.SHOW_ALL);
cc.Canvas.instance['alignWithScreen']();
} */
}
f();
cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LOADING, f);
}
}
export default GSceneUtil.Instance;