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

        这几天在地铁上发现好多人都还在玩消除游戏,今天起码看到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. ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware

    转自:ServletContextAware.ServletRequestAware.ServletResponseAware.SessionAware Struts 2提供了Aware接口.Awar ...

  2. js获取验证码 秒表效果(原创)

    <script src="http://code.jquery.com/jquery-latest.js"></script> <input type ...

  3. 谈谈JavaScript深浅拷贝

    浅拷贝 function shallowCopy(source){ var newObj = {}; for(var attr in source){ newObj[attr] = source[at ...

  4. flash as3.0学习笔记

    F9开动作模板 trace输出 trace(a); 影片剪辑 var mc:MovieClip = new MovieClip();//属性(x,y轴)方法 play,stop mc.x = 10 / ...

  5. NOIP 2012 D1T1 Vigenère密码

    嗯嗯 一道找规律的题.... 真佩服那些把表打出来的人 //By SiriusRen #include <cstdio> #include <cstring> using na ...

  6. A - Translation

    Problem description The translation from the Berland language into the Birland language is not an ea ...

  7. (转)50 个 jQuery 小技巧

    1. 如何修改jQuery默认编码(例如默认UTF-8改成改GB2312): $.ajaxSetup({ajaxSettings:{ contentType:"application/x-w ...

  8. SQL Server-聚焦过滤索引提高查询性能

    前言 这一节我们还是继续讲讲索引知识,前面我们讲了聚集索引.非聚集索引以及覆盖索引等,在这其中还有一个过滤索引,通过索引过滤我们也能提高查询性能,简短的内容,深入的理解,Always to revie ...

  9. 实验6 Bezier曲线生成

    1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法. 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bezier ...

  10. Java中 ArrayList类常用方法和遍历

     ArrayList类对于元素的操作,基本体现在——增.删.查.常用的方法有: public boolean add(E e) :将指定的元素添加到此集合的尾部. public E remove(in ...