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)(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |