按钮创建:


var item1 = cc.MenuItemImage.create("a.png","a_selected.png",function(){ cc.log("a is click")},this);

var item2 = cc.MenuItemImage.create("b.png","b_selected.png",function(){ cc.log("b is click")},this);


//不要用console.log,除非你不想用js binding


//创建好的要放到Menu中,否则不会被注册到事件代理中

var menu = cc.Menu.create(item1);

//还可以这样

menu.addChild(item2,1);

//最后把菜单放到当前场景中

this.addChild(menu,2);


事件屏蔽:

所有菜单创建时,优先级是:cc.MENU_HANDLER_PRIORITY

当场景中出现需要屏蔽的菜单按钮时,你可以将可以点击的菜单置于更优先的位置:

this._m_pMenu.setTouchPriority(cc.MENU_HANDLER_PRIORITY - 2);


然后通过这样把此层一下的事件全部屏蔽掉:

cc.registerTargettedDelegate(cc.MENU_HANDLER_PRIORITY - 1, true, this);


当然,在你离开的时候需要:

cc.unregisterTouchDelegate(this);


原理:

Coco采用html中的事件冒泡机制,但冒泡的顺序可以自己设定,Priority越小代表层次越高,Menu最小=128,比这个更小的就可以把Menu都更优先处理。


cc.registerTargettedDelegate:意为”有目标对象的事件代理”,区别于“标准事件代理”

一旦调用,当前所有Touch事件会经过判定处理,可以传的三个参数:

(priority, passabel, delegator)

作用:当TouchPriority符合priority时,可以根据passable来选择该事件处理是否为冒泡阻塞机制,只处理delegator中的事件。


若onTouchBegan:return false 则屏蔽事件往下层传递,否则事件将会被传入下一层