zoukankan      html  css  js  c++  java
  • lua实现简单

    MessageManager.lua

    local messageManager = {mEventTable = {},mEventUserData = {}}

    --注册事件
    function messageManager.Add(EventName,Func,UserData)
    assert( Func )
    messageManager.mEventTable[ EventName ] = messageManager.mEventTable[ EventName ] or {}
    local Event = messageManager.mEventTable[ EventName]
    table.insert(Event,Func)
    messageManager.mEventUserData[ EventName ] = messageManager.mEventUserData[ EventName ] or {}
    local userDataTable = messageManager.mEventUserData[ EventName ]
    userDataTable[ Func ] = UserData or true
    end

    --移除事件
    function messageManager.Remove(EventName,Func)
    assert( Func )
    local Event = messageManager.mEventTable[ EventName ]
    if not Event then
    return
    end
    table.remove(Event)

    end

    --派发消息
    function messageManager.Dispatch(EventName)
    assert(EventName)
    if (messageManager.mEventTable[EventName] == nil) then
    return
    end
    local Event = messageManager.mEventTable[EventName]
    for i,Func in ipairs(Event) do
    Func(messageManager.mEventUserData[EventName][Func])
    end
    end

    return messageManager
    User.lua

    --获取事件监听器
    local MessageManager = require 'MessageManager'

    --注册事件“a”
    MessageManager.Add("a",function(a) print(a) end,""a" happened!")

    --事件“a”发生
    MessageManager.Dispatch("a")

    print("-------------------")

    --移除事件“a”
    MessageManager.Remove("a",function(a) print(a) end)

    --事件“a”发生
    MessageManager.Dispatch("a")
    运行User.lua得到的结果:

    可以看到注册事件“a”之后,当事件“a”发生之后,相对应的回调函数被事件监听器执行了;当移除事件“a之后”,事件“a”再次发生的时候,事件监听器并没有再执行事件监听者注册事件时留下的回调函数。

    这次完成的事件监听器只是个简单的demo,还有很多地方没有完善的,比如同一个事件被多个事件监听者注册的情况以及同一个事件被同一个事件监听者注册的情况,还有回调函数的参数为可变长参数的情况。

    这篇博客只是我自己在学习lua路上的一点学习记录,希望大家多多指教。
    --------------------- 

  • 相关阅读:
    笔试题 易错题目解析
    SqlServer 函数 大全
    视频上传到自己的服务器打不开
    sql 计算生日提请日期
    Web API 异常处理(转)
    微软源代码管理工具TFS2013安装与使用详细图文教程(Vs2013)
    关于枚举的用法和类型转换
    html title换行方法 如a链接标签内title属性鼠标悬停提示内容换行
    JS的parent、opener、self对象
    uploadfiy
  • 原文地址:https://www.cnblogs.com/ly570/p/11277971.html
Copyright © 2011-2022 走看看