cocos2dx-js 鼠标事件管理器

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值