cocos2dx + lua 中实现 lua的MVC
创建两个类,,CGMainSceneManager是单例,用于MC,CGMainScene 用于V。实现方式类似c++的类
local CGMainScene = class("CGMainScene",function()
return ZnBaseScene:create()
end)
function CGMainScene.create()
local scene = CGMainScene.new()
scene:init()
scene:registerScriptHandler(function(event)
if "enter" == event then
scene:enter()
elseif "exit" == event then
scene:exit()
end
end)
return scene
end
function CGMainScene:ctor()
self._visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.schedulerID = nil
end
function CGMainScene:init()
CGMainManager:instance():init()
CGMainManager:instance():createBgScrollView()
self:addChild(CGMainManager:instance()._scrollView)
CGMainManager:instance():addCheckPoint(CGMainManager:instance()._bgTableName)
local pointTable = {}
pointTable["level"] = 6
pointTable["state"] = 2
pointTable["starnum"] = 2
CGMainManager:instance():setStarandState(pointTable)
local buttonnode = cc.CSLoader:createNode("ButtonLayer.csb")
buttonnode:setPosition(VisibleRect.worldSpace(cc.p(self._visibleSize.width / 2 , self._visibleSize.height)))
self:addChild(buttonnode,CGMainManager:instance()._panelZorder.kButtonZorder)
local function ButtonTouchEvent(sender,eventType)
if eventType == ccui.TouchEventType.began then
elseif eventType == ccui.TouchEventType.ended then
if sender:getTag() == 1 then
print("-----------shopButton----============")
elseif sender:getTag() ==2 then
print("-----------RoleButton----============")
elseif sender:getTag() == 3 then
print("-----------incubatorButton----============")
elseif sender:getTag() == 4 then
print("-----------lotteryButton----============")
elseif sender:getTag() == 5 then
print("-----------signButton----============")
elseif sender:getTag() == 6 then
print("-----------TaskButton----============")
elseif sender:getTag() == 7 then
print("-----------BagButton----============")
elseif sender:getTag() == 8 then
print("-----------button8----============")
elseif sender:getTag() == 9 then
print("-----------button9----============")
elseif sender:getTag() == 10 then
print("-----------button10----============")
end
end
end
local children = buttonnode:getChildren()
local len = table.getn(children)
for i=1,len do
children[i]:addTouchEventListener(ButtonTouchEvent)
end
-- CGMainManager:instance():setOffset()
--关于体力,金币,银币图
CGMainManager:instance():setPanelEvent()
local function IconTouchEvent(sender,eventType)
if eventType == ccui.TouchEventType.began then
elseif eventType == ccui.TouchEventType.ended then
if sender:getTag() == 1 then
print("icon energy button is touch ")
elseif sender:getTag() == 2 then
print("icon silver button is touch")
elseif sender:getTag() == 3 then
print("icon golden button is touch")
end
end
end
CGMainManager:instance()._energyIcon:addTouchEventListener(IconTouchEvent)
CGMainManager:instance()._goldenIcon:addTouchEventListener(IconTouchEvent)
CGMainManager:instance()._silverIcon:addTouchEventListener(IconTouchEvent)
CGMainManager:instance()._panelinfo:setPosition(VisibleRect.worldSpace(cc.p(self._visibleSize.width * 0.15 , 0.1 * self._visibleSize.height)))
self:addChild(CGMainManager:instance()._panelinfo,CGMainManager:instance()._panelZorder.kPanelZorder)
CGMainManager:instance():setPanelInfo()
--CGMainManager:instance():playEffect()
end
function CGMainScene:enter()
--print("CGMainScene:enter")
end
function CGMainScene:exit()
--print("CGMainScene:exit")
end
return CGMainScene
local instance = nil
require("CGMainScene")
CGMainManager = class("CGMainManager",function()
return ZnBaseHandler:create()
end)
function CGMainManager:instance()
if instance ~= nil then return instance end
instance = CGMainManager.new()
return instance
end
function CGMainManager:reset()
if instance ~= nil then
instance = false
end
end
function CGMainManager:ctor()
self._winSize = cc.Director:getInstance():getWinSize()
self._visibleSize = cc.Director:getInstance():getVisibleSize()
end
function CGMainManager:init()
self._checkPointTable = {}
self._scrollView = nil
imageViewTag = 100
self._imageView = cc.Sprite:create("guanka1.png") -- image for test
verticalTotal = 0 --竖直方向上的间隔
verticalSpace = 0
verticalOffset = 450
self._bgTableName =
{
"MainMap_1",
"MainMap_2",
"MainMap_3",
"MainMap_4",
"MainMap_5",
}
--浮动面板
self._panelinfo = nil
self._curEnergyLabel = nil
self._totalEnergyLabel = nil
self._goldenLabel = nil
self._silverLabel = nil
self._energyIcon = nil
self._goldenIcon = nil
self._silverIcon = nil
self._panelZorder =
{
kPanelZorder = 1,
kButtonZorder = 2,
}
--提示框
alertView = nil
cdTime = 10*60*60
--for test
level = 20
end
function CGMainManager:createBgScrollView()
print("create bg scrollView ")
self._scrollView = cc.ScrollView:create()
local function scrollView1DidScroll()
end
local function scrollView1DidZoom()
end
if nil ~= self._scrollView then
self._scrollView:setViewSize(cc.size(self._winSize.width,self._winSize.height))
self._scrollView:setPosition(cc.p(0,0))
self._scrollView:setScale(1.0)
self._scrollView:ignoreAnchorPointForPosition(true)
self._scrollView:setContentSize(cc.size(self._winSize.width,self._winSize.height * #self._bgTableName -verticalOffset * 2))
self._scrollView:setDirection(cc.SCROLLVIEW_DIRECTION_VERTICAL )
self._scrollView:setBounceable(true)
self._scrollView:setDelegate()
self._scrollView:registerScriptHandler(scrollView1DidScroll,cc.SCROLLVIEW_SCRIPT_SCROLL)
end
end
function CGMainManager:addCheckPoint(bgTable) --添加关卡
print("this is checkPoint add function ")
local function touchCheckPointEvent(sender,eventType)
if eventType == ccui.TouchEventType.began then
print(sender:getParent():getParent():getTag())
local tag = sender:getParent():getParent():getTag()
elseif eventType == ccui.TouchEventType.moved then
elseif eventType == ccui.TouchEventType.ended then
end
end
for i=1,table.getn(bgTable) do --添加背景
local name = bgTable[i] .. ".csb"
local bg = cc.CSLoader:createNode(name)
local bgsprite = bg:getChildByName(bgTable[i])
local children = bgsprite:getChildren()
local len = table.getn(children)
for i = 0,len - 1,1 do
local positionx = children[i + 1]:getPositionX()
local positiony = children[i + 1]:getPositionY()
local tag = children[i + 1]:getTag() --拿到tag值
local checkpoint = cc.CSLoader:createNode("Checkpoint.csb")
checkpoint:setPosition(cc.p(positionx,positiony))
table.insert(self._checkPointTable,checkpoint)
bg:addChild(checkpoint,0,tag)
local pointbg = checkpoint:getChildByName("Checkpoint_Bg")
local button = pointbg:getChildByName("Point_Button")
button:addTouchEventListener(touchCheckPointEvent)
local star1 = pointbg:getChildByName("PointStar_1")
local star2 = pointbg:getChildByName("PointStar_2")
local star3 = pointbg:getChildByName("PointStar_3")
local grayStar1 = pointbg:getChildByName("PointStar_Close1")
local grayStar2 = pointbg:getChildByName("PointStar_Close2")
local grayStar3 = pointbg:getChildByName("PointStar_Close3")
local stateclose = pointbg:getChildByName("Point_Close")
local stateopen = pointbg:getChildByName("Point_Open")
local stateok = pointbg:getChildByName("Point_Ok")
local imagepoint = pointbg:getChildByName("Sprite_image")
local silverandgoldenPoint = pointbg:getChildByName("pointSilverOrGolden")
silverandgoldenPoint:setVisible(false)
local pointNum = pointbg:getChildByName("Point_Num")
pointNum:setString(string.format("%s",tag))
self._checkPointTable[tag] = {}
self._checkPointTable[tag]["starTable"] = {}
self._checkPointTable[tag]["grayStarTable"] = {}
self._checkPointTable[tag]["checkpointState"] = {}
self._checkPointTable[tag]["starnum"] = {}
self._checkPointTable[tag]["imagepoint"] = {}
self._checkPointTable[tag]["pointbg"] = {}
table.insert(self._checkPointTable[tag]["starTable"],star1)
table.insert(self._checkPointTable[tag]["starTable"],star2)
table.insert(self._checkPointTable[tag]["starTable"],star3)
table.insert(self._checkPointTable[tag]["grayStarTable"],grayStar1)
table.insert(self._checkPointTable[tag]["grayStarTable"],grayStar2)
table.insert(self._checkPointTable[tag]["grayStarTable"],grayStar3)
table.insert(self._checkPointTable[tag]["checkpointState"],stateclose)
table.insert(self._checkPointTable[tag]["checkpointState"],stateopen)
table.insert(self._checkPointTable[tag]["checkpointState"],stateok)
table.insert(self._checkPointTable[tag]["starnum"],0) --当前等级获得几颗星
table.insert(self._checkPointTable[tag]["imagepoint"],imagepoint)
table.insert(self._checkPointTable[tag]["pointbg"],pointbg)
end
bg:setPosition(VisibleRect.worldSpace(cc.p(0 , self._visibleSize.height -(i - 1) * self._visibleSize.height + verticalOffset)))
self._scrollView:getContainer():addChild(bg,0)
self._scrollView:updateInset()
end
end
function CGMainManager:setPanelEvent()
self._panelinfo = cc.CSLoader:createNode("TopBar.csb")
local energybg = self._panelinfo:getChildByName("ico_energy_bg")
local goldenbg = self._panelinfo:getChildByName("ico_gold_bg")
local silverbg = self._panelinfo:getChildByName("ico_silver_bg")
self._energyIcon = energybg:getChildByName("ico_energy")
self._goldenIcon = goldenbg:getChildByName("ico_gold")
self._silverIcon = silverbg:getChildByName("ico_silver")
self._curEnergyLabel = energybg:getChildByName("energy_Num_Left")
self._totalEnergyLabel = energybg:getChildByName("energy_Num_Right")
self._goldenLabel = goldenbg:getChildByName("gold_Num")
self._silverLabel = silverbg:getChildByName("silver_Num")
end
function CGMainManager:setPanelInfo()
local curEnergy = string.format("%s",300)
local totalEnergy = string.format("%s",500)
local golden = string.format("%s",1000)
local silver = string.format("%s",2000)
self._curEnergyLabel:setString(curEnergy)
self._totalEnergyLabel:setString(totalEnergy)
self._goldenLabel:setString(golden)
self._silverLabel:setString(silver)
end
function CGMainManager:showAlertView(flag)
end
function CGMainManager:setStarandState(PointTable) -- start init
local level = PointTable["level"]
local state = PointTable["state"]
local starnum = PointTable["starnum"]
if self._imageView ~= nil then
local pointx = self._checkPointTable[level]["imagepoint"][1]:getPositionX()
local pointy = self._checkPointTable[level]["imagepoint"][1]:getPositionY()
self._imageView:setPosition(cc.p(pointx,pointy))
self._checkPointTable[level]["pointbg"][1]:addChild(self._imageView)
for i=1,level do
--star
for j=1,starnum do
self._checkPointTable[level]["grayStarTable"][j]:setVisible(false)
end
--state
if state ~= 1 then
self._checkPointTable[level]["checkpointState"][1]:setVisible(false)
self._checkPointTable[level]["checkpointState"][state]:setVisible(true)
elseif state == 1 then
end
end
end
end
function CGMainManager:setOffset()
self._scrollView:setContentOffset(cc.p(0, -verticalSpace))
end
function CGMainManager:playEffect() -- 当前关卡要播放的一系列动作特效 是否通关
--动作测试
local tag = 6
local silverIconx = self._silverIcon:getPositionX()
local silverIcony = self._silverIcon:getPositionY()
local goldenIconx = self._goldenIcon:getPositionX()
local goldenIcony = self._goldenIcon:getPositionY()
local pointsilverIcon = self._silverIcon:convertToWorldSpace(cc.p(silverIconx,silverIcony))
local pointgoldenIcon = self._goldenIcon:convertToWorldSpace(cc.p(goldenIconx,goldenIcony))
local silverMove = cc.MoveTo:create(2,pointsilverIcon)
local goldenMove = cc.MoveTo:create(2,pointgoldenIcon)
local silver = cc.Sprite:create("guanka1.png")
local golden = cc.Sprite:create("guanka1.png")
silver:setPosition(cc.p(10,10))
golden:setPosition(cc.p(10,10))
--[[
local silverx = silver:getPositionX()
local silvery = silver:getPositionY()
local goldenx = golden:getPositionX()
local goldeny = golden:getPositionY()
local positonsilver = convertToWorldSpace(cc.p(silverx,silvery))
local positiongolden = convertToWorldSpace(cc.p(goldenx,goldeny))
]]
self._checkPointTable[tag]["pointbg"][1]:addChild(silver,100)
self._checkPointTable[tag]["pointbg"][1]:addChild(golden,100)
silver:runAction(silverMove)
golden:runAction(goldenMove)
end
return CGMainManager
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。