我们游戏中会遇到很多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更新方法(会用到第三方类库)】的更多相关文章

  1. Vue.js的列表数据的同步更新方法

    这次给大家带来Vue.js的列表数据的同步更新方法,Vue.js列表数据同步更新方法的注意事项有哪些,下面就是实战案例,一起来看一下. 数组的 push(),pop(),shift(),unshift ...

  2. js基础查漏补缺(更新)

    js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...

  3. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  4. JS基础知识再整理..........不断更新中

    1.JS的五种基本数据类型:字符串.数值.布尔.null.underfined. 2.在JS中,字符串.数值.布尔三种数据类型,有其属性和方法: 3.字符串的三种常用方法[.indexof()..su ...

  5. JS基础语法---String对象下的方法(字符串的方法)

    实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法 静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调用的) 字符串的常用属性: . ...

  6. 【Cocos2d-Js基础教学 入门目录】

    本教程视地址频在: 九秒课堂 完全免费 从接触Cocos2dx-Js以来,它的绽放的绚丽让我无法不对它喜欢.我觉得Js在不断带给我们惊喜:在开发过程中,会大大提升我们对原型开发的利用率,使用Js语言做 ...

  7. Qt UI界面改了,但UI界面不更新

    /**************************************************************************** * Qt UI界面改了,但UI界面不更新 * ...

  8. 前端工程师面试问题归纳(一、问答类html/css/js基础)

    一.参考资源 1.前端面试题及答案整理(一) 2.2017年前端面试题整理汇总100题 3.2018最新Web前端经典面试试题及答案 4.[javascript常见面试题]常见前端面试题及答案 5.W ...

  9. 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】

    TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...

随机推荐

  1. linux-01Red Hat Enterprise Linux 7(RHEL7)配置静态IP地址

    为方便在学习linux readhat7,在本地安装安装了虚拟机.为能够用win7连接虚拟机的linux远程客户端操作,则需要虚拟机和win本地的网络互通: 操作如下:1.本地配置ip地址 : 2.验 ...

  2. Shiro-多Realm验证

    1.多Realm验证 存在这样一种场景,同一个密码可能在MqSQL中存储,也可能在Oracle中存储,有可能MqSQL中使用的是MD5加密算法,而Oracle使用SHA1加密算法.这就需要有多个Rea ...

  3. 在Linux CentOS上编译CoreCLR

    经过几天的努力,终于解决了在CentOS上编译CoreCLR的问题.最终发现问题是CMAKE_C_FLAGS的设置引起的. 只要在“src/pal/tools/clang-compiler-overr ...

  4. 无环的visitor模式

    无环的访问者模式,是来改进原有访问者模式的不足之处的,是Robert C. Martin首次提出的.我们知道访问者模式的优点是为被访问继承体系动态添加行为,而无须改变继承体系.但是GOF访问者模式的缺 ...

  5. 不要过早退出循环 while(1){no break}

    我们在尝试新的事物的时候,总是会遇到各种各样的困难,不同的人会在碰壁不同的次数之后退出.用程序员喜欢的话来说就是,我们都在for循环,区别在于你是什么情况下break的.有的人退出阈值高,这是能坚持的 ...

  6. 我的fckeditor实践

    一开始我不懂这个ConnectorServlet是何用处,后来发现是专门用于文件上传的,因为fckeditor默认是不支持这个功能的. ConnectorServlet: /* * FCKeditor ...

  7. 基于javascript实现图片懒加载(亲测有效)

    这篇文章主要介绍了javascript实现图片懒加载的方法及思路,有时我们需要用懒加载,也就是延迟加载图片的方式,来提高网站的亲和力,需要的朋友可以参考下! 一.定义 图片延迟加载也称为懒加载,延迟加 ...

  8. atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php

    atitit.压缩算法 ZLib ,gzip ,zip   最佳实践  java .net php 1. 压缩算法的归类::: 纯算法,带归档算法 1 2. zlib(适合字符串压缩) 1 3. gz ...

  9. iOS---SQLite数据库框架之FMDB -Swift

    SQLite数据库框架之FMDB 什么是FMDB? FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API.对比苹果自带的Core Data框架,更加轻量级 ...

  10. Liferay7 BPM门户开发之26: 集成Activiti到Liferay7

    开发顺序: 实战任务1,开发BPM管理后台(用于在Liferay管理中心管理Activiti模型上传) 一个熟悉Portlet操作的项目,为开发打好基础. http://www.cnblogs.com ...