【Cocos2d-Js基础教学(7)界面UI更新方法(会用到第三方类库)】
我们游戏中会遇到很多UI更新的时候,大部分时候我们会remove该节点,再重新绘制的方法来进行UI更新。
但是这种更新效率并不高,这里我推荐大家一个第三方的库,来通过注册更新的方式来对UI进行更新管理;
它的大名其实很响亮,就是“js-signals”。官方地址:http://www.bootcdn.cn/js-signals/
官方的定义是:Custom Event/Messaging system for JavaScript.(JavaScript自定义事件的消息传递系统。)
有兴趣的同学可以继续更深入的研究!
下面我们来使用这个第三方库:
1,首先我们得下载这个最新的第三方库(js-signals.js)然后拷贝到我们上节课的工程中的 BaseUtil文件夹中;

2,然后我们需要在创建一个UI刷新处理类,叫UpDataUIManager.js。
UpDataUIManager.js:
/**
* Created by yangshengjiepro on 15/4/23.
*/
//全局事件名称
var EVENT_UI_MAINTOP="maintop"; var EVENT_UI_MAIN_LISTVIEW="listview"; var UpdateUIManager=cc.Class.extend({
_pageManagers:null,
init:function(){
this._pageManagers={};
},
/**
* 添加事件监听
* @param pageStr 标识在哪个page上(自定义的,不同page的pageStr不同)
* @param func
*/
addPageUpdateListeners :function(pageStr,func,targetObj, multiple){
multiple = multiple || 0;
if(!this._pageManagers[pageStr]){
this._pageManagers[pageStr]=new signals.Signal();
} if(!multiple){
this._pageManagers[pageStr].removeAll();
}
this._pageManagers[pageStr].add(func,targetObj);
},
removeListeners:function(pageStr){
if(this._pageManagers&&this._pageManagers[pageStr])
this._pageManagers[pageStr].removeAll();
},
/**
* 根据pageStr分发pageStr指定的页面的事件
* @param pageStr
* @param params type json
*/
dispatch:function(pageStr,params){
if(this._pageManagers[pageStr]){
this._pageManagers[pageStr].dispatch(params);
}
}
});
UpdateUIManager.s_SharedPageManager = null;
UpdateUIManager.getInstance = function () {
if (!UpdateUIManager.s_SharedPageManager) {
UpdateUIManager.s_SharedPageManager = new UpdateUIManager();
UpdateUIManager.s_SharedPageManager.init();
}
return UpdateUIManager.s_SharedPageManager;
}; /////例子
// var TestLayer=cc.Layer.extend({
// init:function(){
// return true;
// },
// refreshUI:function(data){ // },
// onEnter:function(){
// this._super();
// UpdateUIManager.getInstance().addPageUpdateListeners(EVENT_PAGE_MAINTOP,this.refreshUI,this);//绑定事件方法
// },
// onExit:function(){
// this._super();
// UpdateUIManager.getInstance().removeListeners(EVENT_PAGE_MAINTOP);//删除事件方法
// }
// }); // var TestLayer2=cc.Layer.extend({
// init:function(){
// var data;
// UpdatePageManager.getInstance().dispatch(EVENT_PAGE_MAINTOP,data);//触发事件方法
// return true;
// }
// });
分析一下我们这个类里面的4个方法:
1,addPageUpdateListeners :function(pageStr,func,targetObj, multiple)
这个是我们注册监听的方法,需要填写我们的、刷新UI标识、具体刷新方法、一个Obj对象
2,removeListeners:function(pageStr)
直接可以移除该事件
3,dispatch:function(pageStr,params)
调用该事件,传入标识,和需要传递使用的参数
在我们上节课中的MainLayer.js类里面继续添加如下方法:
updataUI:function(public_mun){
if(this.lv_100!=null)
{
this.lv_100.setString("等级:"+public_mun);
}
if(this.lv_200!=null)
{
this.lv_200.setString("lv:999");
}
},
onEnter:function(){
this._super();
UpdateUIManager.getInstance().addPageUpdateListeners(UPDATA_UI_BG,this.updataUI,this);//绑定事件方法
},
onExit:function(){
this._super();
UpdateUIManager.getInstance().removeListeners(UPDATA_UI_BG);//删除事件方法
},
在onEnter,和onExit回调函数中分别去处理,注册事件,和退出是移除事件的方法
我们通过按钮事件,来触发调用dispatch方法,来执行我们的UpDataUI刷新方法,并且传递
一个public_num变量整数;
touchEvent_MainButton:function(sender,type){
switch (type){
case ccui.Widget.TOUCH_ENDED:
var tagnum = sender.getTag();
Mlog.c("touchEvent_MainButton tagnum >"+tagnum);
UpdateUIManager.getInstance().dispatch(UPDATA_UI_BG,public_mun);//触发事件方法
break;
default :
break;
}
}
代码写完之后,我们还需要在project.json里面添加我们的两个类UpDataUIManager.js和signals.js;
OK,我们整个刷新的业务逻辑已经书写完毕了;Run起来看一下效果:

点击音乐按钮后

我们的等级变为,传进来的2,Lv:变成了999,那么证明我们的UI异步刷新调用执行成功了!
OK本节知识点就到这里;
本节课源码下载:
源码使用方法:
自己创建新工程,解压下载的文件,将所有文件拷贝到你新工程的目录下全部覆盖既可以运行!
【Cocos2d-Js基础教学(7)界面UI更新方法(会用到第三方类库)】的更多相关文章
- Vue.js的列表数据的同步更新方法
这次给大家带来Vue.js的列表数据的同步更新方法,Vue.js列表数据同步更新方法的注意事项有哪些,下面就是实战案例,一起来看一下. 数组的 push(),pop(),shift(),unshift ...
- js基础查漏补缺(更新)
js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...
- 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)
温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...
- JS基础知识再整理..........不断更新中
1.JS的五种基本数据类型:字符串.数值.布尔.null.underfined. 2.在JS中,字符串.数值.布尔三种数据类型,有其属性和方法: 3.字符串的三种常用方法[.indexof()..su ...
- JS基础语法---String对象下的方法(字符串的方法)
实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法 静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调用的) 字符串的常用属性: . ...
- 【Cocos2d-Js基础教学 入门目录】
本教程视地址频在: 九秒课堂 完全免费 从接触Cocos2dx-Js以来,它的绽放的绚丽让我无法不对它喜欢.我觉得Js在不断带给我们惊喜:在开发过程中,会大大提升我们对原型开发的利用率,使用Js语言做 ...
- Qt UI界面改了,但UI界面不更新
/**************************************************************************** * Qt UI界面改了,但UI界面不更新 * ...
- 前端工程师面试问题归纳(一、问答类html/css/js基础)
一.参考资源 1.前端面试题及答案整理(一) 2.2017年前端面试题整理汇总100题 3.2018最新Web前端经典面试试题及答案 4.[javascript常见面试题]常见前端面试题及答案 5.W ...
- 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】
TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...
随机推荐
- JBoss 系列四十八:JBoss 7/WildFly 使用TCP构建集群
我知道JBoss 集群Default 的设定就是UDP(JGroups),但在实际环境中的网络环境时常不允许UDP,在这种情况下,我们就需要使用TCP. JBoss 7/WildFly 中负责集群的主 ...
- Orchard Express Oracle v1.7.2 发布
发布说明: 1. 添加Oracle支持,在AppData目录下提供Oracle及Sql Server数据库创建脚本. 2. 修正上一版本(精简版 v1.7.2)中,Dashboard无需登录问题. O ...
- Xamarin.Android之下拉刷新
一.前言 当今任何一个App中只要存在列表,基本上都会使用下拉刷新,而身为Xamarin一族的我们自然也不会落后,下面笔者将带领大家在Xamarin下实现Android中的下拉刷新的效果. 二.准备工 ...
- [ACM_其他] Modular Inverse [a关于模m的逆 模线性方程]
Description The modular modular multiplicative inverse of an integer a modulo m is an integer x such ...
- SQL语法的重要知识点总结
好几年没写SQL语句了.现在到了新的team,需要用到数据库.作为QA的话时常需要使用客户端工具连接到数据库中找寻或修改数据.这么长时间没使用,一些SQL的使用技巧都忘得差不多了.晚上看了一些资料,花 ...
- iOS开发---集成百度地图
由于iOS MapKit框架很多情况并不能满足我们的需求,我们可以选择集成百度地图,那该如何操作呢? 申请Key 登录百度API管理中心申请Key http://lbsyun.baidu.com/ap ...
- Liferay7 BPM门户开发之32: 实现自定义认证登陆(定制Authentication Hook)
第一步:修改liferay-hook.xml <?xml version="1.0"?> <!DOCTYPE hook PUBLIC "-//Lifer ...
- 几种网络加载的过渡(更新MaterialProgressBar)
自定义圆形ProgressBar 1.在drawable文件夹下新建:progressbar_circle_1.xml,如下: <?xml version="1.0" enc ...
- java protected 与默认权限的区别
作用域 当前类 同package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly(default) √ √ × ...
- .NET中的流
当应用程序需要和磁盘上的文件打交道的时候,就有了流的概念.流就像架设在应用程序所在内存和磁盘之间的一个管道. 大致思路 → 建立管道 //FileMode.Open打开现有文件,另外还有FileMod ...