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- ...
随机推荐
- .net 写魔兽登录
代码如下: 登录页面: public partial class FrmLogin : Form { public FrmLogin() { InitializeComponent(); } priv ...
- Linux常用三十七条指令
Linux常用三十七条指令 基础指令(11):ls,pwd,cd,mkdir,touch,cp.mv,rm,vim,>/>>/,cat 进阶指令(10):df,free,head,t ...
- 浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色
简介 生产环境下的数据是如果可以写在资产负债表上的话,我想这个资产所占的数额一定不会小.而墨菲定律(事情如果有变坏的可能,无论这种可能性有多小,它总会发生)仿佛是给DBA量身定做的.在上篇文章介绍的简 ...
- css加载是否会阻塞dom树渲染
这里说的是头部引入css的情况 首先,我们都知道:css是由单独的下载线程异步下载的. 咱们先分析下css加载会影响什么,刚才的问题太笼统了,咱们需要细化一下. 会影响什么呢? 一个就是DOM树解析, ...
- 屏幕 z
private void FullScreen() //全屏 { SizeMode = 2; FormBorderStyle = FormBo ...
- Kubernetes JSONpath Support
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=test-nginx,ap ...
- traceroute工具
traceroute是类Unix的命令工具,用于测试到网络上某台主机host的跳数以及延时情况.其运行原理是,通过发送指定TTL的UDP包给目的主机host,通过将TTL逐渐增大,就能收到一些ICMP ...
- httpServeltRequest和Model传值的区别
需要将请求发过来的数据(或者说参数)传递到重定向的页面/转发的页面的时候,就要用到>>model.addAttribute("mine", UserUtils.getC ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...
- 将psd格式批量转换成jpg或png格式(C#自制软件)
此项目基于.net framework 4.0 将psd格式批量转换成jpg或png格式. 链接:https://pan.baidu.com/s/16IEjX0sHaY9H3Ah7mv6IPQ 提取码 ...