在cocos2dx-js里面,你为每个节点添加鼠标事件就得添加一段类似下面的代码:
var node = 当前需要添加鼠标事件的节点
var listener = cc.EventListener.create({
event : cc.EventListener.MOUSE,
onMouseDown : function(event){
... //按下鼠标处理
},
onMouseUp : function(event){
... //松开鼠标处理
},
onMouseMove : function(event){
... //移动鼠标处理
},
onMouseScroll : function (event) {
... //滑动鼠标滑轮处理
}
});
cc.eventManager.addListener(listener, node);
并且这里还有注意需要处理的地方.例如你给一个精灵添加鼠标事件后, 每当你按下鼠标时它都会触发onMouseDown(),但是这时也许鼠标的位置并不在精灵上面,所以你还得判断鼠标位置才进行后面的处理(除非你就是想要这样的效果).
这是个烦琐过程.下面的鼠标事件管理器就是为了解决这个烦琐过程.
MouseManager.js文件:
var MouseManager = {};
MouseManager.m_bPropagation = true; //传递事件标志(一个总控制)
MouseManager.m_pTypeCode = {
"mousedown" : 1, //000001
"mouseenter" : 2, //000010
"mousemove" : 4, //000100
"mouseleave" : 8, //001000
"mouseup" : 16, //010000
"mousewheel" : 32 //100000
};
MouseManager.enablePropagation = function (propagation) {
MouseManager.m_bPropagation = propagation;
};
MouseManager.mouseDown = function (event) {
var node = event.getCurrentTarget();
var event_node = MouseManager._getEventNode(node);
if (!event_node) {
return;
}
var pos = event.getLocation();
//cc.log("->MouseManager::pressDown x = " + pos.x + ", y = " + pos.y);
var propagation = MouseManager.m_bPropagation;
var nsize = node.getContentSize();
var npos = node.convertToWorldSpace(cc.p(0, 0));
var nrect = cc.rect(npos.x, npos.y, nsize.width, nsize.height);
if (node.isVisible() && cc.rectContainsPoint(nrect, pos)) {
//on mouse down
if (event_node["mousedown"] && typeof event_node["mousedown"].cb == 'function') {
if (event_node["mousedown"].target) {
event_nod