cocos2dx-3.x: lua 弹出提示框

一,创建基类

弹出框是平时比较常用的一类,如二次确认,或者消息提示,物品展示等,在此我特意封装了下载lua中的弹出框处理,方便以后使用

1,基类

local PopBase= cc.LayerColor:create(cc.c4b(0, 0, 0, 200))
PopBase:setPosition(cc.p(0, 0))

function PopBase:CreatePopBase(csb)
    if csb then
     local size= cc.Director:getInstance():getVisibleSize();
    self.resourceNode_ = cc.CSLoader:createNode(csb)
    self:addChild(self.resourceNode_)
    self.resourceNode_:setPosition(cc.p(size.width/2,size.heigh/2))
    self.resourceNode_:setAnchorPoint(cc.p(0.5,0.5))
    end
    self.isEndedRemove=true;
    self:initPopBase()
    self:onT()
  return self
end
function PopBase:initPopBase()
     print("PopBase init")
end

function PopBase:onT()
    local function onTouchBegan(touch,event)
       
        return self:onTBegan(touch,event)
    end

    local function onTouchMoved(touch,event)
       self:onTMoved(touch,event)
    end

    local function onTouchEnded(touch,event)
       self:onTEnded(touch,event)
    end
        local listener = cc.EventListenerTouchOneByOne:create()
        listener:setSwallowTouches(true)
        listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
        listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
        listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
        local eventDispatcher = self:getEventDispatcher()
        eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
end
function PopBase:onTBegan(touch,event)

    return true
end
function PopBase:onTMoved(touch,event)

end
function PopBase:onTEnded(touch,event)

  if self.isEndedRemove then
       self:removeFromParent(true)
  end
  print("PopBase onTouchEnded")
end



return PopBase
2.自己调用的子类需要继承自基类,如下:

local Popceshi =require("app.views.popup.PopBase")
function Popceshi:initPopBase()
     print("Popceshi init")
    --修改层颜色
    -- self:initWithColor(cc.c4b(255, 0, 0, 200))

    --设置是否点击屏幕关闭(关闭:true,不关闭:false 默认:关闭)
    -- self.isEndedRemove=true

    --当前的csd节点
    --self.resourceNode_
end

return Popceshi
3.创建一个管理类,方便调用时添加

--[[
使用方法:
1.注册:在新场景中注册,传入弹出层(如:popupLayer)
    PopManager:getInstance():initPopContainer(popupLayer)

2.使用:在需要引用的位置调用该方法,传入要调用的弹出层的键值(如:"ceshi")
    PopManager:getInstance():createPop("ceshi")

3.新增:新增新的弹出层时,参见Popceshi.lua并且在Pop_tabel中添加键值对,[键值]={poplayer="类名",popcsd="csd文件"}
 (如:["ceshi"]={poplayer="Popceshi",popcsd="ceshi.csd"}),无csd文件时,popcsd=nil
]]
cc.exports.PopManager = class("PopManager")
local Pop_tabel={
["base"]={poplayer="PopBase",popcsd=nil},
["ceshi"]={poplayer="Popceshi",popcsd=nil},
}

local Pop_layer_
    
function PopManager:new(o)  
    o = o or {}  
    setmetatable(o,self)  
    self.__index = self  
    return o  
end  
    
function PopManager:getInstance()  
    if self.instance == nil then  
        self.instance = self:new()  
    end  
        
    return self.instance  
end  
function PopManager:initPopContainer(PopContianer)
    printf("initSceneContainer starting!!!!!")
    Pop_layer_ = PopContianer
    if nil ~= Pop_layer_ then
        printf("initPopContainer success!")
    end
end
function PopManager:createPop(PopId)
   if nil ==Pop_tabel[PopId] then
   	print("Pop_tabel["..PopId.."] is nil")
    return
   end
    package.loaded["app.views.popup."..Pop_tabel[PopId].poplayer] = nil 
    package.loaded["app.views.popup.PopBase"] = nil 
   local pop_l
   if nil~=Pop_tabel[PopId].popcsd then
       pop_l=require("app.views.popup."..Pop_tabel[PopId].poplayer):CreatePopBase(Pop_tabel[PopId].popcsd)
   else
      
       pop_l=require("app.views.popup."..Pop_tabel[PopId].poplayer):CreatePopBase()
   end 
   Pop_layer_:addChild(pop_l,100)
   return pop_l
end
 
4.代码中引用

(1)在场景中传入“弹出层”,即该弹出框添加到的界面

(2)在调用处传入自己创建的新的子类名称即可(该名称在管理器中已经注册过)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值