按钮创建:
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 则屏蔽事件往下层传递,否则事件将会被传入下一层