程序设计之LUA设计邮件系统

      今天通过一周多的时间,把邮件系统提交了。但是还没测,还有很多细节需要继续修改。

      自己程序设计的原则:1、满足需求不断变化的需求;2、使用最有效算法;3、是否存在内存泄露;4、程序模块化;5、数据、逻辑、ui的分离;

虽然自己设计的并不能满足以上的要求,基本还处于功能实现,逻辑基本疏通。跟自己的同事和主程间还有好长的一段路走。

     首先自己设计邮箱系统有以下模块:收件列表,写信,每封信件详细信息(分个人邮件和系统邮件)。遇到的主要问题是各个层对象之间相互调用,数据使用与初始化的模块不清晰,还有就是自己在使用变量的时候犯的简单错误。下面是自己整个框架函数。通过函数说明。

<span style="font-size:18px;">---EmailLayer是自己邮件UI的主类,主要在里面通过九宫格构建背景和版面,并生成了写信,收信,邮件列表和设置裁剪区(专供邮件列表使用)
function EmailLayer:__init()
--只做裁剪
--生成收件箱详细
--生成写信详细
--生成系统收件箱详细
--信件列表
-- --获取新之未读邮件
--触摸后更新
--触摸区域
Layer.SetFullScreenTouch(self)
end</span>
<span style="font-size:18px;">
 --获取下载列表
function EmailLayer.GetDownLoadResList(layer_data,msg_data)
end
--打开面板需要申请的网络数据
function EmailLayer.RequestNetWorkMsg() end

--信件列表层它继承了EmailLayer,这里主要对列表的触摸动作进行监听
function EmailListLayer:__init(parent)
--裁剪区触摸操作
--按下
end
--信件列表更新,通过Refresh()把服务器端发来存在全局变量里的数据在这里处理。并把每一项的数据放在EmailItemLayer,这样便已在每一项上进行操作。
function EmailListLayer:Refresh()
--存放服务端发来的信件列表信息
--邮件列表索引
end

--收件箱每项
EmailItemLayer = EmailItemLayer or BaseClass(Layer)
--把EmailListLayer获取的每一项信息添加到左边的邮件类表
function EmailItemLayer:__init(parent, index, email_status, email_type, email_title, timestamp, sender)
Layer.__init(self)
--显示邮件类型
--显示系统邮件
end

--写信详细,生成写信的版面,通过EmailLayer 生成的写信按钮调用callback函数,来切换到写信版面
EmailWriteLayer = EmailWriteLayer or BaseClass(Layer)
function EmailWriteLayer:__init()
end
function EmailWriteLayer:Refresh()
end

--物品,主要是显示邮件列表里面每一封信的详细内容是否有附件,有附件的用这个类去处理
EmailGoodsItemLayer = EmailGoodsItemLayer or BaseClass(Layer)
function EmailGoodsItemLayer:__init(item_id,item_num)
end
--系统收件箱详细,把邮件列表里的系统邮件通过触摸点击来调用,并把详细信息显示
EmailSystemDetailLayer = EmailSystemDetailLayer or BaseClass(Layer)
--初始化显示系统邮件信息的UI
function EmailSystemDetailLayer:__init()
end
--设置详细信息
--通过Refresh处理从服务器获取的信息显示
function EmailSystemDetailLayer:Refresh() 
--显示附件物品 
end

--个人收件箱详细,同系统邮件一样。不过没有附件,可以有回复功能
EmailDetailLayer = EmailDetailLayer or BaseClass(Layer)

function EmailDetailLayer:__init(callback)
end

function EmailDetailLayer:Refresh()
end

--对发送服务器的请求进行监听。并通过监听,控制显示UI
function EmailLayer:ListenNetWorkMsg(msg_type, protocol_data)

end</span>


以上就是自己邮件的模块,在这里使用到很多cocos比较常用的API(往后详细介绍)。自己的模块在数据和UI显示分离逻辑不够严谨,导致自己在调用的时候频频出现问题。并使用了全局变量为自己方便控制。以后要往模块化的方向去写,设计更多的模块,方便自己管理和减少程序运行BUG。在编写的时候,把自己的需求分析清楚,不急于编写。下一个任务已经出来了,有开始新的启程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
介绍一下自己的LUA封装 1: C++中的类可以注册到LUA 中,在LUA里面可以使用像C++一样使用对象调用函数一样 2: 将C或者C++中的函数注册到LUA中,在LUA里面直接调用全局函数 3: 加载LUA文件并且执行,执行LUA文件中的某个函数。 会自动平衡LUA堆栈,使用的时候不需要担心LUA栈的问题 4: 可以将LUA中的某个函数作为回调函数,当条件满足时调用回调函数 .................. 这篇就介绍一下怎样在LUA中使用C++的类对象 //说明一下::带有LRT_ 的函数都是自己封装的,在LUA 库里面是没有的 --下面是main 函数 int _tmain(int argc, _TCHAR* argv[]) { //获取LUA 运行状态 lua_State *l = LRT_GetLuaState(); //注册C++类 RegisterLuaClass::RegisterClass(l); char current_dir[260] = {0}; DWORD ret = GetCurrentDirectory(260, current_dir); std::string strTmp(current_dir); std::stringstream strS; strS<<strTmp<<"\\LuaClassTest.lua"; //加载一个LUA文件,只是加载了,并没有执行,一定要返回成功了才可以 LRT_RunChunk if (LRT_ErrorCode_Success == LRT_CreateChunkFromFile(l,strS.str().c_str())) { LRT_RunChunk(l); } strS.clear(); strS.str(""); strS<<strTmp<<"\\dataStruct.lua"; if (LRT_ErrorCode_Success == LRT_CreateChunkFromFile(l,strS.str().c_str())) { LRT_RunChunk(l); } getchar(); return 0; } --下面是LUA文件中代码 --获取C++对象,参数为 类型的名称,这个名称和C++的名称对应 local object = LRTGetObject("Test.Lua.Class") --调用对象的函数 object:Fun1() object:Fun2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值