每天晚上抽点时间写一点点就一点点,曾经不写博客可是如今。不为别的仅仅是为了告诉别人我还存在。

        这几天在地铁上发现好多人都还在玩消除游戏,今天起码看到5个人,可是玩的版本号都不一样。看来休闲游戏还是有市场的。

(题外话)

        说到lua的事件派发。事实上非常easy就是一个table的事,这个是View里面自己的一个内置派发。全部view都继承它。还有就是我不是大神,仅仅是任劳任怨的小兵。全部就简单化了。
--[[

        2016-2-23 xinghua

]]

local EventDispatcher = class("EventDispatcher")





local _Events = nil





function EventDispatcher:ctor( )

        _Events = {}

end

--[[

        表结构

        {

                type = {

                        Listener1,

                        Listener2

                }

        }

]]

--注冊监听事件

function EventDispatcher:AddEventListener(stype,Listener)

        if type(stype) ~= "string" or type(Listener) ~= "function" then

                error("AddEventListener error : type error ",2)

                return

        end

        --获取_Events里面事件

        local eventlist = _Events[stype]





        if eventlist == nil then

                eventlist = {}

                table.insert(eventlist,Listener) --想队列里面插入一个事件

                _Events[stype] = eventlist   --放到大表里面

        else

                local func = eventlist[Listener]

                if func == nil then

                        table.insert(eventlist,Listener)

                else

                        error("AddEventListener error : listeren hai in")

                end

        end

end





--[[

        触发

        ]]

function EventDispatcher:Dispatcher(stype,...)

        if type(stype) ~= "string" then

                error("Dispatcher error : stype error",1)

                return

        end





        local listeners = _Events[stype]

        if listeners == nil or #listeners <= 0 then

                return

        end

        for i,v in ipairs(listeners) do

                v(...)

        end

end





--[[

        移除指定类型的全部关联事件侦听,假设參数为nil则删除当前注冊器中全部的函数侦听

        listener ~= nil 删除这个类型里面这个监听

]]

function EventDispatcher:RemoveEventListeners(stype,listener)

        --空删除全部清空表

        if stype == nil then

                --获取keys

                local keys = table.keys(_Events)

                for i,v in ipairs(keys) do

                        _Events[v] = nil --设置为空

                end

                return

        end                

        if type(stype) ~= "string" then

                error("RemoveEventListeners error : stype no string",2)

                return

        end

        local typeListeners  = _Events[stype] --取出里面全部的这个类型的func

        --依据类型删除

        if listener ~= nil and type(listener) == "function" then

                if typeListeners ~= nil and table.nums(typeListeners) > 0 then

                        if typeListeners[listener] ~= nil then

                                typeListeners[listener] = nil

                        end

                end

                return

        end

        --删除一个类型

        if typeListeners ~= nil then 

                _Events[stype] = nil

        end

end





function  EventDispatcher:DumpEvent( )

        dump(_Events)

end





return EventDispatcher

项目记录22-- tolua基于lua框架事件派发的更多相关文章

  1. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)

    一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...

  2. 开源基于lua gc管理c++对象的cocos2dx lua绑定方案

    cocos2dx目前lua对应的c++对象的生命周期管理,是基于c++析构函数的,也就是生命周期可能存在不一致,比如c++对象已经释放,而lua对象还存在,如果这时候再使用,会有宕机的风险,为此我开发 ...

  3. 基于图像识别框架Airtest的Windows项目自动化测试实践

    写在前面 上一篇分享了<基于Sikuli GUI图像识别框架的PC客户端自动化测试实践>,但sikuli看起来怎么都像是上个世纪的界面风格,且功能过于简陋.而同样基于图像识别框架的Airt ...

  4. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧

    一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...

  5. 基于easyui框架中input 类型的checkbox拼接成字符串存入数据库和读取选中---善良公社项目

    项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端ht ...

  6. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  7. 基于vue项目的组件中导入mui框架初始化滑动等效果时需移除严格模式的问题

    基于vue项目的组件中导入mui框架初始化滑动等效果时,控制台报错:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties ...

  8. 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

    概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...

  9. .Net Core 基于CAP框架的事件总线

    .Net Core 基于CAP框架的事件总线 CAP 是一个在分布式系统中(SOA,MicroService)实现事件总线及最终一致性(分布式事务)的一个开源的 C# 库,她具有轻量级,高性能,易使用 ...

随机推荐

  1. php json 初始化函数(格式化json字符串为php json_decode 标准的字符串)

    $json="[{ 'i':100000, 'u':-1,n: '中国'},{i:100001,u:-1,n:'阿尔巴尼亚'},{i:100002,u:-1,n:'阿尔及利亚',}]&quo ...

  2. hammer教程

    一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...

  3. H3BPM表单设计器公式设计参考

    表单设计器公式设计参考 整体说明 Ø 公式以javascript方式解析,最终支持JS语法或计算方式: Ø 公式变量以数据项为主,以{}符号表示数据项,例如数据项A,表示为{A}:如果是子表中的数据项 ...

  4. 带中横线的日期格式在iOS手机系统上 转换时间戳NaN问题

    类似于 '2019-04-01 14:13:00' 这样的日期格式转换时间戳在iOS手机上是无法转换的,需要先处理日期格式成 '2019/04/01 14:13:00' var str = '2019 ...

  5. Fail2ban + firewalld 防护doss攻击

    系统环境:centos7.3 用途:利用fail2ban+Firewalld来防CC攻击和SSH爆破 准备工作: 1.检查Firewalld是否启用 #如果您已经安装iptables建议先关闭 ser ...

  6. window 10 多版本激活工具

    window 10 通用版激活工具 云盘地址:https://pan.baidu.com/s/1bo3L4Kn 激活工具网站:http://www.tudoupe.com/win10/win10jih ...

  7. [Codeforces]Good Bye 2017

    A - New Year and Counting Cards #pragma comment(linker, "/STACK:102400000,102400000") #inc ...

  8. JavaScript中的工厂方法、构造函数与class

    JavaScript中的工厂方法.构造函数与class 本文转载自:众成翻译 译者:谢于中 链接:http://www.zcfy.cc/article/1129 原文:https://medium.c ...

  9. 利用JavaScript实现文本框改文字功能

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  10. 04--C语言文件操作函数大全(超详细)

    fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const cha ...