加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Quick-cocos2d-x的MVC架构之model研究

发布时间:2020-12-14 20:32:58 所属栏目:百科 来源:网络整理
导读:最近正在学习Quick-cocos2d-x下的MVC架构,做下笔记 MVC架构包含model、controller、view model一般是会有多个实例的类,该类只有数据没有视图,比如Hero类 controller一般一个类就是一个全局对象,比如PlayDuelController views一般就是界面表现部分,比如He
最近正在学习Quick-cocos2d-x下的MVC架构,做下笔记
MVC架构包含model、controller、view
model一般是会有多个实例的类,该类只有数据没有视图,比如Hero类
controller一般一个类就是一个全局对象,比如PlayDuelController
views一般就是界面表现部分,比如Hero类增加图形表示后的HeroView类
对于一些场景、层、控件不一定要放在views目录下,可以单独建立一个scenes、controls的目录


本篇主要是归纳一下model的写法,这里会用我自己定义的类来做演示,同时也可以参考Quick-cocos2d-x示例代码中的mvc例子,另外版本是3.3
一.基本定义
1.基本类定义
1)第一级类
--从cc.mvc.ModelBase派生
local People = class("People",cc.mvc.ModelBase)


--构造函数是固定格式
--properties是一个表,所有初始参数都在这一个参数里
--用super.ctor初始化父类构造函数,注意用.,而且前面有self
function People:ctor(properties,events,callbacks)
People.super.ctor(self,properties)
end


--返回对象
return People


2)派生类
--引入基类
local People = import(".People")
--派生
local Man = class("Man",People)


function Man:ctor(properties,callbacks)
Man.super.ctor(self,properties,callbacks)
end


return Man


2.对象生成
--包含文件
local People = require("src.app.models.People")


--new对象,每次new是会新产生对象实例,参数是table类型
local People1 = People.new({name="tom"})
local People2 = People.new({name="mary"})


3.定义属性
--先把父类的属性表clone过来
People.schema = clone(cc.mvc.ModelBase.schema)
--定义属性,后面的是类型
People.schema["name"] = {"string"}
--number类型属性要有默认值
People.schema["sleepTime"] = {"number",0}


--实际的变量名是属性名+_,要增加get和set两个函数存取
function People:getName()
return self.name_
end


function People:setName(name)
self.name_ = name
end


--使用方法
printf("People1 name=%s",People1:getName())
People1:setName("chendana")
printf("People1 name=%s",People1:getName())


4.定义方法
function People:eat(number)
print("in function eat")
end


二.面向对象性
1.函数多态
lua没法写函数参数不同的同名函数,如果真要这么写,实际调用会自动调用最后那个
比如:
function People:eat(number,type)
print("in function eat(number,type)")
end


function People:eat(number)
print("in function eat(number)")
end


People1:eat(10,1)


最后会显示in function eat(number),如果把函数位置调一下,就会调用后面定义的


2.派生类函数覆盖

--可以直接覆盖,用super的函数调用基类处理

--注意也是用.,而且参数要有self,不能写成Man.super:eat(number)

function Man:eat(number) print("in man function eat(number)") Man.super.eat(self,number) end 3.虚函数 是自动支持的 父类 function People:normal() print("in function People:normal") end function People:sleep(time) print("in function People:sleep(time)") end function People:eat(number) print("in function People:eat(number)") end function People:dayAction() self:normal() self:eat(5) self:sleep(10) end 派生类 function Man:eat(number) print("in function Man:eat(number)") Man.super.eat(self,number) end 调用 local Man1 = Man.new({name="tom",beard="1"}) Man1:dayAction() 会显示 [LUA-print] in function People:normal [LUA-print] in function Man:eat(number) [LUA-print] in function People:eat(number) [LUA-print] in function People:sleep(time)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读