cocos2d-x lua 点击任意位置地方 关掉界面
2017-11-05 本文已影响247人
亮亮同学
cocos2d-x技术群新群:117871561
c++技术交流群:593010226
1,
原理:创建一个imageView,设置imageView的点击事件,该回调事件的功能是:点击结束时将该imageView从父节点删掉。将设置界面的layer添加到 该imageView上面,当imageView从父节点删掉时 设置界面的layer也会被删掉 从而实现关闭设置界面的 效果
项目代码 ,重点在于我注释的部分
--设置界面
function GameViewLayer:showSet()
self:showMenu(false)
self:removeChildByTag(TAG.SET_VIEW)
--创建一个imageView
local Mask = ccui.ImageView:create()
Mask:setTag(TAG.SET_VIEW)
--此处是拉伸该imageView
Mask:setContentSize(cc.size(yl.WIDTH, yl.HEIGHT))
--设置为9点精灵的属性,保证拉伸后不会失真变形
Mask:setScale9Enabled(true)
Mask:setPosition(yl.WIDTH / 2, yl.HEIGHT / 2)
Mask:setTouchEnabled(true)
self:addChild(Mask, GameViewLayer.TopZorder)
--添加监听,回调函数是匿名函数
Mask:addTouchEventListener(
function(sender, eventType)
if eventType == ccui.TouchEventType.ended then
Mask:removeFromParent()
end
end
)
--加载设置界面的CSB
local setNode = cc.CSLoader:createNode("game_res/Set.csb")
setNode:setPosition(yl.WIDTH / 2, yl.HEIGHT / 2)
Mask:addChild(setNode)
2,利用ccui.layout实现
--按钮背景
self.btnBg = cc.Sprite:create("bg.png")
:setVisible(true)
self:addChild(self.btnBg)
--回调
local callbacklayout = function(ref)
local pos = ref:getTouchEndPosition()
lcoal rectbg = self.btnBg:getBoundingBox()
if not cc.rectContainsPoint(rectbg,pos) then
self.btnBg:setVisible(false)
end
--创建layout
local layoutShield = ccui.Layout:create()
:setContentSize(cc.Size(display.width,display.height))
:setTouchEnabled(true)
:addClickEventListener(callbacklayout)
self:addChild(layoutShield)