最新消息:文章中包含代码时,请遵守代码高亮规范!

对添加监听事件的对象判断作用域–cocs2d-js【原创】

JavaScript erin 385浏览 0评论

最近遇到一个cocos2d-js的坑,当我给一个对象添加鼠标事件的时候,发现点击整个游戏界面都会触发该事件:


var tombclick = cc.EventListener.create({
event: cc.EventListener.MOUSE,
swallowTouches:true,
onMouseDown:function(event){
target.setScale(1.5); // 给目标精灵进行缩放

},
onMouseUp:function(event){
var target = event.getCurrentTarget();
target.setScale(1);
}
})
cc.eventManager.addListener(tombclick, tombstyle);

点击这个游戏界面,绑定目标都会放大。

我自己做了临时的解决方法,获取绑定目标的坐标,通过cc.rect()划分区域,并判断点击光标是否在划分的区域内部,如果在内部,则点击的是绑定对象,执行事件,否则不执行:


var tombclick = cc.EventListener.create({
event: cc.EventListener.MOUSE,
swallowTouches:true,
onMouseDown:function(event){
var target = event.getCurrentTarget();
var locationInNode = target.convertToNodeSpace(event.getLocation());
var targrt_size = target.getContentSize();
var rect = cc.rect(0, 0, targrt_size.width, targrt_size.height);
if (!cc.rectContainsPoint(rect, locationInNode)) {
return false;
} else {
target.setScale(1.5); // 给目标精灵进行缩放
}
},
onMouseUp:function(event){
var target = event.getCurrentTarget();
target.setScale(1);
}
})

后期查阅资料发现了更好的解决办法,


cc.eventManager.addListener(cc.EventListener.create({
event : cc.EventListener.MOUSE,
onMouseDown : function(event) {
var pos = event.getLocation(); //当前事件发生的光标位置
var target = event.getCurrentTarget(); //事件绑定的目标
//判断当前事件发生的位置是否在事件目标区域内
if( cc.rectContainsPoint(target.getBoundingBox(), pos) ) {
cc.log("Mouse Down");
return true;
}
return false;
},
onMouseUp : function(event) {
var pos = event.getLocation();
var target = event.getCurrentTarget();
if( cc.rectContainsPoint(target.getBoundingBox(), pos) ) {
cc.log("Mouse up");
return true;
}
return false;
}
}), playButton);

target.getBoundingBox()获取对象真实大小,这种方法不需要获取坐标,设置区域,可以直接进行判断

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/21528.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者erin的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!