LayaBox进阶之UI管理器
自己动手写框架的话,UI管理器是最基础的一部分;
- export class UIManager {
- private mainContent: Laya.Sprite;
- private scene: GameScence;
- private uiList:any[];
- constructor() {
- this.mainContent = new Laya.Sprite();
- this.uiList = [];
- }
- }
mainContent 为默认添加到的层级,
- public openWindow(clazz: any, param?: { data?: any }) {
- let view = new clazz()
- this.setView(clazz, view);
- this.mainContent.addChild(view);
- }
- private setView(clazz: any, view:Laya.Node):void{
- let v: Laya.Node = this.getView(clazz);
- if(!v){
- let uiData = {clazz: clazz, view: view};
- this.uiList.push(uiData);
- }
- }
首先判断本地缓存有没有,有的话 不处理,没得话,创建,push到数组中
- private getView(clazz: any):Laya.Node{
- for(let i:number =0 ; i<this.uiList.length ; i++){
- let uiData = this.uiList[i];
- if(uiData.clazz == clazz){
- return uiData.view;
- }
- }
- }
- public closeWindow(clazz: any): void {
- let v = this.getView(clazz);
- let index: number = this.getViewIndex(clazz);
- if(v){
- v.removeSelf();
- this.uiList.splice(index,1);
- }
- }
- private getViewIndex(clazz: any):number{
- for(let i:number =0 ; i<this.uiList.length ; i++){
- let uiData = this.uiList[i];
- if(uiData.clazz == clazz){
- return i;
- }
- }
- return -1;
- }
- public setGameScene(gameScene: GameScence): void {
- this.scene = gameScene;
- if (this.scene) {
- this.scene.parent.addChild(this.mainContent);
- }
- }
- export let ui: UIManager = new UIManager();
- window["ui"] = ui;
- import { LogUtil } from "../util/LogUtil";
- /**
- * 为基类定义若干方法
- */
- export class PatchManager{}
- (function(){
- let _proto:any;
- _proto = Laya.Scene.prototype;
- _proto.createView = function(view:Object){
- if (view && !this._viewCreated) {
- this._viewCreated = true;
- Laya.SceneUtils.createByData(this, view);
- }
- this.onInit();
- this.onShow();
- Laya.timer.frameLoop(1, this, ()=>{
- // console.info(this);
- this.onUpdate();
- });
- }
- /********************************************************************************
- * Node
- ********************************************************************************/
- _proto = Laya.Node.prototype;
- _proto.onInit = function(){
- }
- _proto.onShow = function(){
- }
- _proto.onUpdate = function(){
- }
- _proto.onDisable=function(){
- this.onHide();
- }
- _proto.onHide = function(){
- }
- })();
LayaBox进阶之UI管理器的更多相关文章
- 游戏开发之UI管理器(跨引擎)
使用UI管理器的目的 使用单场景与zindex结合的方式管理UI. 能够隐藏底层UI达到优化效果. 很好的组织和管理UI. 跨引擎使用. 管理器分类 根据以往经验我开发了三种类型的管理器,队列管理器, ...
- Python进阶(上下文管理器与with语句)
/*上下文管理器必须有__enter__和__exit__方法*/ class MyResource: def __enter__(self): print('链接资源') return self / ...
- Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备二)
接下来,我们继续分析UIlib.h文件中余下的文件,当然部分文件可能顺序错开分析,这样便于从简单到复杂的整个过程的里面,而避免一开始就出现各种不理解的地方. 1. UIManager.h:UI管理器, ...
- 第1组UI组件:布局管理器
1 布局管理的来源 为了让UI在不同的手机屏幕上都能运行良好----不同手机屏幕的分辨率/尺寸并不完全相同,如果让程序手动控制每个组件的大小.位置,会给编程带来巨大的麻烦.为了解决这个问题.andro ...
- Java可视化编程,基于布局管理器的UI设计
在<事件驱动模型>讲述了如何将用户与功能实现代码联系到一起.怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析,站在用户角度上分析UI各组件倒底该如何设计呈现. 优秀的UI会 ...
- Swing-布局管理器应用--WIN7上计算器的UI实现
学完了Swing布局管理器,为了加深理解我决定做一些UI的实现,那就从WIN7上的计算器开始吧!首先,我们来研究一下它的UI.该计算器的UI主要有3个,分别是标准型.科学型和程序员型,如下图所示. ...
- 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...
- [cocos2dx笔记010]用于UI的事件管理器
cocos2dx有一个编辑器:cocostudio.眼下来说,已经是比較好用了.仅仅要载入导出的资源.就能够用上了.省去手动搭建面的麻烦. 可是.非常多须要事件的地方,操作比較麻烦,所以这里提供一个事 ...
- 基于Web的Kafka管理器工具之Kafka-manager安装之后第一次进入web UI的初步配置(图文详解)
前期博客 基于Web的Kafka管理器工具之Kafka-manager的编译部署详细安装 (支持kafka0.8.0.9和0.10以后版本)(图文详解) 基于Web的Kafka管理器工具之Kafka- ...
随机推荐
- linux 安装和卸载软件
安装: apt-get install cups-pdf 卸载:apt -get remove cups
- wxpython wx.windows的API
wx.Window is the base class for all windows and represents any visible object on screen. All control ...
- 有关在新版mac上 git 环境变量的配置问题
前段时间买的新版 mpb ,各种环境什么都没有配置,想着在网上边搜边摸索着将各种开发工具逐步配置齐全,各种问题不断出现,不知道是不是新版的原因不兼容. 其中 git 的配置尤为奇怪.在git官网上直接 ...
- 【Leetcode】【Easy】Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- 开发时复制aspx网页的方法
简单的copy /paste *.aspx网页,所使用的是同一个CodeBehind ,这往往不是我们所想要的!!!我们一般都希望使这两个网页具有各自的 *.cs文件.步骤:①新建一个Web ...
- March 31 2017 Week 13 Friday
Sometimes, you think the sky is falling down, actually, that is just because you stand slanting. 有时候 ...
- 通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩
kubectl scale命令用于程序在负载加重或缩小时进行pod扩容或缩小,我们通过一些实际例子来观察scale命令到底能达到什么效果. 命令行创建一个deployment: kubectl run ...
- Document flow API in SAP CRM and C4C
Document flow API in CRM 以一个具体的例子来说明.在Appointment的Overview page上能看见一个名叫Reference的区域,这里可以维护一些其他的业务文档的 ...
- python入门17 类和对象
类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处) 成员变量(self.变量) 类的方法( @classmethod,cls参数) 成员方法( self参数 ) 静态方法 ...
- python入门14 字典dict
字典dict是无序的key:value格式的数据序列 #coding:utf-8 #/usr/bin/python """ 2018-11-11 dinghanhua 字 ...