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)
上一篇下一篇

猜你喜欢

热点阅读