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

时间: 2024-08-13 15:16:23

cocos2dx + lua 中实现 lua的MVC的相关文章

【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-16 10:08 30803人阅读 评论(18) 收藏 举报 游戏脚本luaanimationpython 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/681.htm

Lua学习笔记--Lua调用C初探

上次学习了怎么用C调用Lua的函数,并返回一个结果,这次看看怎么反过来,用Lua调用C的函数. 一.简介 C调用Lua函数比较简单,只需要操作相关的栈就可以了,但是Lua调用C的话,稍微有一点麻烦,虽然还是用栈来进行数据的传递,但是由于Lua中本身没有C中写的函数,所以需要多一步将C函数注册到Lua中的步骤. Lua反过来调用C函数的话,首先,我们要写一个要被调用的函数,这个函数有一个格式的要求 ,返回值为int,但是这个int并不代表Lua函数的返回值,而是函数返回值的个数,Lua支持多重返回

Cocos2d-x Lua中使用标签

游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Photoshop绘制在背景图片上,这种方式的优点是表现力很丰富,例如:①号文字“COCOS2DX”中的“COCOS”.“2D”和“X”设计的风格不同,而动态文字则不能,而且静态文字无法通过程序访问,无法动态修改内容.动态文字一般是需要通过程序访问,需要动态修改内容.Cocos2d-x Lua可以通过标签

Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView

 ScrollView 我想玩儿过手机的朋友对滑动条都不陌生吧,(旁边: 这不是废话么???? )   那好吧,废话不多说直接开始ScrollView吧 local m_BaseNode  -- 主场景 local CreateScroll    -- 房间分级滑动视图 local CreateStageNode   -- 创建节点 local m_ScrollView              -- 滑动层变量 local m_Inner     -- 内容器 local addScrol

Cocos2d-x 脚本语言Lua中的面向对象

Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义.但相同在Lua中能够利用面向对象的思想来实现面向对象的类继承. 一.复制表的方式面向对象 --Lua中的面向对象 --[[ 复制表方式面向对象 參数为一张表.通过遍历这张表取值,赋给一张空表,最后返回新建的表.来达到克隆表 ]] function clone(tab) local ins =

cocos2d-x lua中实现异步加载纹理

原文地址:  http://www.cnblogs.com/linchaolong/p/4033118.html 前言   问题:最近项目中需要做一个loading个界面,界面中间有一个角色人物走动的动画,在显示这个loading界面的时候加载资源,项目是用cocos2d-x lua实现的,界面做出来后发现在加载资源的时候界面会卡住. 原因: 因为使用的不是异步加载,而且cocos2d-x没有绑定异步加载资源的api到lua中,其实在lua中实现不了异步. 想通过在lua中启动一个线程去加载资源

Cocos2d-x Lua中实例:特效演示

Cocos2d-x Lua中实例:特效演示 下面我们通过一个实例介绍几个特效的使用,这个实例如下图所示,上图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的特性动作,点击Back按钮可以返回到菜单场景. 特效实例 我们重点看看MyActionScene场景,MyActionScene.lua主要代码如下: [html] view plaincopy … … local sprite                                 

Cocos2d-x Lua中帧动画

Cocos2d-x Lua中帧动画 帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵的运动绘制每一帧图片,因此帧动画会由很多帧组成,按照一定的顺序切换这些图片就可以了. 在Cocos2d-x Lua中播放帧动画涉及到两个类:Animation和Animate,类图如图所示,Animation是动画类,它保存有很多动画帧,Animate类是动作类它继承于ActionInterval类,属于间隔动作类,它的作用是将Animation定义的动画转换成为动作进行执行,这样我

Cocos2d-x Lua中Sprite精灵类

Cocos2d-x Lua中Sprite精灵类 精灵类是Sprite,它的类图如下图所示. Sprite类图 Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的子类有:PhysicsSprite和Skin.PhysicsSprite是物理引擎精灵类,Skin是皮肤精灵类用于骨骼动画.创建Sprite精灵对象创建精灵对象有多种方式,其中常用的函数如下:cc.Sprite:create ().创建一个精灵对象,纹理[ 纹理(texture),表示物体表面细