博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Egret场景切换管理类切换和单例使用方法
阅读量:7078 次
发布时间:2019-06-28

本文共 3334 字,大约阅读时间需要 11 分钟。

场景切换是很多开发者在开发过程中必不可少的一个环节,当项目中有两个或两个以上的游戏场景时,怎样管理这些场景,能够使它们之间的切换更加方便呢?今天就为大家介绍场景切换管理类的切换方法和单例的使用方法。

案例源码:

首先创建一个所有场景的父类Scene

Scene类主要是为了方便管理场景,此类是一个抽象类,子类必须继承此类并实现onComplete()抽象方法才能进行场景的切换。

abstract class Scene extends eui.Component{    public constructor() {        super();        // 监听组件创建完毕 也就是场景的外观创建完毕        this.addEventListener(eui.UIEvent.CREATION_COMPLETE,this.onComplete,this);    }     protected abstract onComplete();}

场景管理器SceneManger

所有场景的切换,弹出关闭都是由SceneManger类来控制,这样方便对场景进行统一管理。

1.使用单例模式

SceneManger类需要使用到单例模式,单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。

class SceneManager {    private static _manager:SceneManager;    public static get Instance(){        if( SceneManager._manager==null){            SceneManager._manager = newSceneManager();        }        return SceneManager._manager;    }    public constructor() {    }}

2.控制场景切换的方法

changeScene()方法:当舞台上有场景时,会先将当前场景从舞台移除,再添加新场景到舞台上;当舞台还没有场景时,会直接添加到舞台上。

public rootLayer:eui.UILayer;//起始场景    private currentScene:Scene;//需要显示的场景    private pop_scene:Scene;//弹出场景层    //切换场景    public changeScene(s:Scene){        if(this.currentScene){           this.rootLayer.removeChild(this.currentScene);            this.currentScene = null;        }        this.rootLayer.addChild(s);        this.currentScene = s;    }

3.弹出场景和关闭弹出场景

弹出场景不会使底层场景消失,而是直接在当前场景上再显示一个场景出来(主要用于设置面板之类的)。

在弹出场景时先调用了一次关闭场景层,防止还没关闭场景层又点击了弹出场景层。

//弹出场景层    public pushScene(s:Scene){        this.popScene();        if(!this.pop_scene){            this.rootLayer.addChild(s);            this.pop_scene = s;        }    }    //关闭场景层    public popScene(){        if(this.pop_scene){            this.rootLayer.removeChild(this.pop_scene);            this.pop_scene = null;        }    }

在入口文件 Main.ts 中引入场景管理类 SceneManage

首先将Main.ts中createGameScene()方法中的代码删掉,再调用下面的方法,将this定为起始场景(舞台)。

SceneManager.Instance.rootLayer = this;

图片描述

使用eui创建弹出层(TanChu.exml)。

下图示例为弹出场景:

图片描述

eui文件创建完成之后需在终端中输入egret build编译项目,这时会在default.thm.json 文件中生成皮肤对应的skinName。

图片描述

开始场景(StartScene.ts)、游戏场景(GameScene.ts),结束场景(EndScene.ts)对应的TS文件

由于StartScene类继承自Scene抽象类,所以在此类中必须得实现onComplete()方法,示例代码如下:

class StartScene extends Scene {        public btn_tc: eui.Label;//弹出层按钮        public btn_qh2: eui.Label;//切换场景        public constructor() {            super();            //指定开始场景对应的皮肤文件StartScene.exml            this.skinName ="resource/game/StartScene.exml";        }        //实现父类的onComplete方法        protected onComplete() {            //设置两个Label为可点击            this.btn_tc.touchEnabled =true;            this.btn_qh2.touchEnabled =true;            //添加点击事件           this.btn_tc.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onTaptc,this);            this.btn_qh2.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onTapqiehuan, this);        }        //弹出场景        private onTaptc(){        }        private onTapqiehuan(){        }}

游戏场景(GameScene),结束场景(EndScene)对应的ts文件基本与开始场景一致。

可参考源码:

游戏初始化时在Main.ts中的createGameScene()方法添加开始游戏场景(StartScene),切换场景时调用SceneManager.Instance.changeScene()即可;注意:此处参数为一个场景实例。

let s1:StartScene = new StartScene();

SceneManager.Instance.changeScene(s1);

弹出场景层方法

在对应的点击事件中调用pushScene()方法。

let tc:Tanchu = new Tanchu();

SceneManager.Instance.pushScene(tc);//添加场景弹出层

如果需要关闭弹出场景层,在弹出场景层的类中调用popScene()方法。

SceneManager.Instance.popScene();//移除场景层

小结

本文主要讲解了场景切换管理类的切换方法和单例的使用方法,有任何技术问题或者觉得这篇文章对你有所帮助,欢迎留言与我们交流互动!

转载地址:http://sjvml.baihongyu.com/

你可能感兴趣的文章
svn的基线划分与管理
查看>>
黄连解毒汤治疗月经过多
查看>>
【转】iOS学习之Autolayout(代码添加约束) -- 不错不错
查看>>
delete和truncate的一个严重区别
查看>>
访问GUItexture
查看>>
javaScript(4):对象
查看>>
C# 堆与栈、值类型与引用类型、可空类型
查看>>
默认值函数[Python读书]cookbook --20.1 在函数调用中获得常新的默认值默认值函数...
查看>>
字符和文档识别的四十年研究
查看>>
最后一行数据
查看>>
Linux 下smi/mdio总线通信
查看>>
java
查看>>
SPREAD for Windows Forms 控制输入法
查看>>
用语音编程 你想过没?
查看>>
android应用推荐
查看>>
ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对
查看>>
Linux文件锁flock
查看>>
135. Candy
查看>>
试想一下,在代码学习Swift!
查看>>
provider: 命名管道提供, error: 40 - 无法打开 SQL Server 联系)
查看>>