各模块组成如下,layers放UI界面文件,logic放逻辑处理文件,这样界面跟逻辑分开方便各自独立处理。service下的Net可以用来接收客户端发的消息,再发给服务器,而eventManager是负责把服务器返回的消息分发给modules下相应的模块。 modules用于放各个模块,如登录、商店等,用来接收eventManager分发来自服务器返回的消息。share下放一些要多处用到的数据文件,如个人信息在不同场景和layer中都要用到。
注册流程如下,登录与该流程一样,有些细节不一样而已。
部分代码解析:
1,eventManager.lua如何将服务器返回的消息分发给对应的消息模块,并调用该模块对应的函数:
如下,首先将各模块注册到eventManager.lua的modules 中,当服务器有消息发给eventManager时,eventManager就凭消息ID在modules中各模块找,如果可以通过该消息ID找到一个函数,则调用这个函数,即用来接收来自服务器返回的消息进而处理消息。
local eventManager = class("eventManager")
local modules = {}
function eventManager:dispatch(msg)
local id = msg.id
for _,m in pairs(modules) do
local events = m.events
local functionName = events[id]
if functionName then
m[functionName](m,msg)
break
end
end
end
function eventManager:registerModuleMsg(m)
table.insert(modules,m)
end
return eventManager
2,如何在eventManager.lua中注册各消息模块:
因为不同的消息需要不同的函数处理,所以需要消息ID和处理函数一一对应起来,可以在模块内写上消息ID与对应函数的关系,如下,然后调用eventManager的registerModuleMsg,则将该模块注册到eventManager中。
local login = class("login")
function login:ctor()
self.events=
{
[100]="RegisterRet",
[101]="LoginRet",
}
eventManager:registerModuleMsg(self)
end
function login:RegisterRet(ret)
--处理服务器返回的注册消息
end
function login:LoginRet(ret)
--返回服务器返回的登录消息
end
return login
3.如何创建历史登录账号记录的下拉菜单:
下单菜单是一个listview,每一个登录过的账号就是Item,多少个账号记录就有多少个item。首先要有账号记录的数据,在每次登录成功后,把该账号信息保存到本地,在每次点击下拉按钮时,就会读取本地文件,把历史记录账号展示出来。item可单独写一个类,给listview添加item时,可获取一个item的对象,再进行克隆添加;如果每次添加item都需要加载Json文件,会造成运行速度慢。