一,创建基类
弹出框是平时比较常用的一类,如二次确认,或者消息提示,物品展示等,在此我特意封装了下载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)在调用处传入自己创建的新的子类名称即可(该名称在管理器中已经注册过)