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

        这几天在地铁上发现好多人都还在玩消除游戏,今天起码看到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. 由于管理员设置的策略,该磁盘处于脱机状态"解决办法

    .运行:cmd .输入:DISKPART.exe .DISKPART> san .DISKPART> san policy=onlineall .DISKPART>list disk ...

  2. numpy快速指南

    Quickstart tutorial 引用https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Prerequisites Before ...

  3. LeetCode Weekly Contest 21

    1. 530. Minimum Absolute Difference in BST 最小的差一定发生在有序数组的相邻两个数之间,所以对每一个数,找他的前驱和后继,更新结果即可!再仔细一想,bst的中 ...

  4. MySql数据库中乱码问题解决方案

    show variables like 'character%';    //查看当前各系统位置的字符编码格式 问题一: Incorrect string value: '\xB4\xF3\xB4\x ...

  5. jar运行main函数的方法

    当把java项目打包成jar后,如何运行main函数呢? 第一种:指定运行类: java -cp test.jar com.ming.test.Test 第二种:在MANIFEST.MF里配置了Mai ...

  6. 3.ThinkPHP入门---视图

    视图:MVC三大组成部分,负责信息的展示和输出 1.视图的创建 创建的位置需要是在分组目录下的view目录下余控制器同名的目录中. 2.视图的展示 在smarty和tinkphp都是使用diaplay ...

  7. java8 Stream 笔记

    stream的定义:对一个源中的一系列元素进行聚合操作. 一系列元素:stream对一组有特定类型的元素提供了一个接口.但是stream并不真正存储元素,元素根据需求被计算出来. 源:stream可以 ...

  8. idea下的jsp开发中cannot resolve taglib with uri的解决方法

    写jsp难免会用到<c:foreach>标签,于是我在idea上的jsp顶头写下了 <%@ taglib prefix="c" uri= 'http://java ...

  9. (转载)RxJava 与 Retrofit 结合的最佳实践

    RxJava 与 Retrofit 结合的最佳实践 作者:tough1985 感谢 DaoCloud 为作者提供的 500 RMB 写作赞助: 成为赞助方 /开始写作 前言 RxJava和Retrof ...

  10. 错误:Camera录制视频(6.0错误),5.1正常,7.1正常 (java.lang.RuntimeException: start failed.at android.media.MediaRecorder.native_start(Native Method))

    Process: com.example.mycamera2, PID: 24086 java.lang.RuntimeException: start failed. at android.medi ...