在cocos2d-js实现自动绑定cocostudioUI控件与事件(三)
一、为cc.Node类型节点注册触摸事件演示常规方式为cc.Node类型注册触摸事件 ctor: function() {
...
this._label = new ...
cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ONE_BY_ONE,swallowTouches: true,onTouchBegan: this.onTouchBegan,onTouchMoved: this.onTouchMoved,onTouchEnded: this.onTouchEnded
},this);
...
},onTouchBegan: function(touch,event) {
//更新label文字
this._label.setString('onTouchBegan');
},onTouchMoved: function(touch,event) {
//更新label文字
this._label.setString('onTouchMoved');
}
onTouchEnded: function(touch,event) {
//更新label文字
this._label.setString('onTouchEnded');
}
以上代码中使用cc.eventManager为当前cc.Node对象注册触摸事件,共需要7行代码。而事件处理函数中,想访问成员变量”_label”,但使用this._label是却是常见的错误写法。要想正常访问当前成员变量,需要如下修改 onTouchBegan: function(touch,event) {
//需要从event参数中获取当前target对象,target才正是当前layer
var target = event.getCurrentTarget();
target._label.setString('onTouchBegan');
}
分析理解 :1.当前this对象为cc.eventManager.addListener的第一个参数。 ctor: function() {
...
this._label = new ...
var self = this;
cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ONE_BY_ONE,//注意这里
onTouchBegan: function(touch,event) {
return self.onTouchBegan(touch,event);
}
},
以上代码请大家自己分析,touchMovedtouchEnded事件我没有给出代码请自己补全。 我的解决思路与方案:
sz.uiloader.registerTouchEvent:代码演示:为当前this对象注册触摸事件 ctor: function() {
...
//为当前this对象注册触摸事件
sz.uiloader.registerTouchEvent(this);
},//当前对象事件响应函数
_onTouchBegan = function(sender,touch,event) {
...
return true;
}
代码演示:为某个cc.Node对象注册触摸事件 ctor: function() {
...
var this._button = ...
//需要为节点设置name
this._button.setName('_button');
//第一个参数为触摸节点,第二个参数为事件响应对象
sz.uiloader.registerTouchEvent(this._button,this);
},//button节点响应函数,注意函数命名写法:前缀+name+事件名,驼峰命名
_onButtonTouchBegan = function(sender,event) {
...
this._button.setPosition(...)
return true;
}
二、sz.UILoader增加对 cocostudio2.1的支持cocos2d-js 3.3已经发布,同时支持了cocostudio2.1 UI编辑器。我简单试玩了下cocostudio2.1很像之前的cocosbuilder编辑器,从资源窗口、动画窗口 、属性窗口等。其中感觉最有用的就是UI界面可以相互嵌套。 这就是为什么要在sz.UILoader中先实现cc.Node节点的事件响应的原因。 源码地址: https://github.com/ShawnZhang2015/UILoader (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |