项目学习记录
Opened this issue · 0 comments
CrayonQ7 commented
InnerEventSystemIDCount -- Event初始化时+1,全局变量
InnerEventSystemList = {} -- 以Event的systemID作为索引,将Event加入到该List中
Event {
systemID = InnerEventSystemIDCount
target_ = self
triggle = false
listeners_ = {}
delayHandlerMap = {}
delayHandlerID = 0
nextListenerHandleIndex_ = 0
-- 需要激发的事件(延后调用方式)
needFireEvents = List.New() -- List.lua
initEvent() -- 初始化target,listeners_,nextListenerHandleIndex_
--[[
将事件的名字eventName作为索引,与该事件相关的listener以及listener的tag组成表添加到listeners_中
即,listeners_ = {
eventName1 = {{listener, tag}, {...}, {...}} ,
eventName2 = { {listener, tag}, {...}, {...}} ,
...
}
即相同事件名可以有不同listener
每添加一次,nextListenerHandleIndex_就加1
--]]
addEventListener(eventName, listener, tag)
dispatchEvent(eventName,...) -- 调用该eventName的所有listener
removeEventListener(listenerToRemove) -- 根据listener本身是否匹配移除该监听
removeEventListenersByHandle(handleToRemove) -- 根据handle移除,每个listener在listeners_中的handle是唯一的
removeEventListenersByTag(tagToRemove)
removeEventListenersByEvent(eventName)
removeAllEventListeners()
hasEventListener(eventName)
dumpAllEventListeners() -- printf出所有的listener
fireNextFrame(eventName, ...) -- 下一帧触发
update(nowTime, elapseTime) -- 调用已经处于派发队列中的Event
fireDelay(eventName, delayTime, ...)
destructor()
unBind = removeEventListenersByHandle
bind = addEventListener
fire = dispatchEvent
}
BaseController : Event {
CacheList = {} -- 该table中保存的是发送某协议时的系统时间
registerProtocal(id, func_name) -- func_name的格式一般是response13101,这里的13101就是前面的id,协议编号
-- 注册协议号回调
send(cmd, ...) -- cmd是协议编号,发送协议时会判断当前系统时间与上一次发送改协议时的时间之差
-- 若 < 2 则不会发送本次协议
register(cmd) -- 将系统时间存入CacheList
}
MailController : BaseController {
MailController.instance = self
model = { rewardVo = nil, isRedTips = 0, isReadMail = {} }
addEvents() -- 绑定request事件与request函数
-- 如,self:bind(MailEvent.REQUEST_19001, handler(self,self.request19001))
init() -- 注册协议号回调
getInstance()
openView() -- 创建view
requestXXXXX(...)
responseXXXXX(vo)
cleanData() -- 删除view
}
NoOpenEffectMap = {
["CrossStartView"] = true,
["GetEuipActionView"] = true,
}
BaseView {
CacheBG = {}
MANAGE = -5 -- 手动模式
CLOSE = -4 -- 关闭上层baseView
COMMON = -3 -- baseView共存
RETURN = -2 -- 隐藏上层baseView,关闭后返回上层baseView
SINGLE = -1 -- 关闭其他所有baseView
_childList = {}
_isVisible = false
_layoutList = {} -- 子节点layout会被添加进来
layoutList = {}
_giftList = {}
_touchPaneVisible = true
_hasCommonBg = false
runnerCallback -- 如果它是一个函数则在update中调用
addRunner(callback) -- 将BaseView添加到Runne中,优先级为3
update(nowTime, elapseTime)
setVisible(bool, animate)
setSwallow(opactity) -- 制作黑色底层
setBlockTouch(isBlockTouch)
addChild(layout, pos, zorder)
unregisterWindow()
}
-- 根据外部设定的优先级在每一帧中一次执行所有托管对象的RunObj
Runner {
Runner.Instance = self
-- 用于标记某个模块是否已经注册,避免重复性的注册
all_run_obj_list = {}
id_count = 0 -- 注册的模块的id
-- 出现每帧间隔时间大于0.1秒、0.5秒的次数
num50 = 0
num10 = 0
-- 支持1~4优先级指定,1为最先执行,4为最后
priority_run_obj_list = {{},{},{},{}}
getInstance()
-- 主update中调用该方法,触发托管对象的update
update(now_time, elapse_time) --[[
遍历priority_run_obj_list表,会得到4个表
遍历每个表,调用表中所有对象的update函数
所以根据优先级添加到priority_run_obj_list表中的对象必须要有update函数
--]]
-- 根据优先级,将run_obj添加到priority_run_obj_list表中
addRunObj(run_obj, priority_level) --[[
run_obj必须要有update函数
若run_obj未注册过,则以run_obj为索引,将{priority_level,self.id_count}
添加到all_run_obj_list表中
若已注册过则不再注册
--]]
-- 从Runner中删除一个run_obj
removeRunObj(run_obj)
-- 获取添加的帧频总数,即priority_run_obj_list表中run_obj的总数
getRunnerNum()
}