【quick-cocos2d-lua】 登录系统

【quick-cocos2d-lua】 登录系统_第1张图片

【quick-cocos2d-lua】 登录系统_第2张图片【quick-cocos2d-lua】 登录系统_第3张图片【quick-cocos2d-lua】 登录系统_第4张图片

  

各模块组成如下,layers放UI界面文件,logic放逻辑处理文件,这样界面跟逻辑分开方便各自独立处理。service下的Net可以用来接收客户端发的消息,再发给服务器,而eventManager是负责把服务器返回的消息分发给modules下相应的模块。 modules用于放各个模块,如登录、商店等,用来接收eventManager分发来自服务器返回的消息。share下放一些要多处用到的数据文件,如个人信息在不同场景和layer中都要用到。

【quick-cocos2d-lua】 登录系统_第5张图片

 

注册流程如下,登录与该流程一样,有些细节不一样而已。

【quick-cocos2d-lua】 登录系统_第6张图片

 

部分代码解析:

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文件,会造成运行速度慢。

 

 

你可能感兴趣的:(【quick-cocos2d-lua】 登录系统)