CrayonQ7/Lua

项目学习记录

Opened this issue · 0 comments

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()
}