范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

为什么游戏架构要用事件来驱动?

  今天总结一下游戏架构中的事件触发机制,游戏架构中为什么需要由事件驱动。
  主要是为了解耦,所谓高内聚,低耦合,如果不采用事件驱动的方式,则会像下面这样来写代码。
  比如说,游戏内有多个玩法模块,"玩家"在打造装备的时候,可能触发"装备打造xx阶的成就",也可能达成某种条件获得了时装。
  这种情景的话,如果没有采用事件驱动的方式来写代码,则需要在装备模块的"升级装备"函数内调用 成就模块 的检查成就达成的函数,还需要调用 时装模块 的检查获得时装的函数。 function equipStrengthen() 	-- 装备强化逻辑  	checkAchievement()  -- 成就模块检查成就 	checkObtainFashion()  -- 时装模块检查获得时装 end
  如果装备关联的模块越来越多的话,就要记得去相关的函数内添加相关的调用。
  事件驱动的方式就比较好的处理了这种情况。 如果是用事件驱动的方式来处理以上问题,则我们会这么做,由装备模块发出"装备强化"的事件,成就模块和时装模块只需要监听"装备强化"事件做相应的处理就好了。
  在装备强化的模块内只需要一行代码,发出事件,后续如果需要增加关联的模块时,装备模块完全不用动,新模块只要增加监听事件就可以了。
  下面我用lua实现一个例子: ------------------------------------------------------ 事件触发器 local Listener = {} function Listener:new(channel, callback)     local obj = {         callback = callback,         channel = channel,     }     setmetatable(obj, self)     self.__index = self     return obj end   local Channel = {} function Channel:new(event)     assert(event)     local obj = {         listeners = {},         event = event,     }     setmetatable(obj, self)     self.__index = self     return obj end  function Channel:on(callback)     listener = Listener:new(self, callback)     table.insert(self.listeners, listener) end   local EventEmitter = {} function EventEmitter:new()     local obj = {         events = {},  -- 监听的所有事件         channels = {}, -- event: channel     }     setmetatable(obj, self)     self.__index = self     return obj end  function EventEmitter:setEvents(events)     self.events = events end  function EventEmitter:on(event, callback)     assert(event)     assert(callback)     if not self.events[event] then         error("not register event: "..event)     end     local channel = self.channels[event]     if not channel then         channel = Channel:new(event)         self.channels[event] = channel     end     channel:on(callback) end  function EventEmitter:emit(event)     if not self.events[event] then         error("not register event: "..event)     end      local channel = self.channels[event]     if not channel then return end      for _, listener in ipairs(channel.listeners) do         listener.callback()     end end ----------------------------------------------------- 装备模块 local eventEmitter = EventEmitter:new() eventEmitter:setEvents({     ["equipStrengthen"] = "装备强化", })   function equipStrengthen()     -- 装备强化逻辑     eventEmitter:emit("equipStrengthen") end  ------------------------------------------------------ 成就模块 function checkAchievement()     print("checkAchievement") end  eventEmitter:on("equipStrengthen", checkAchievement)  -- 成就模块注册监听  ------------------------------------------------------ 时装模块 function checkObtainFashion()     print("checkObtainFashion") end  eventEmitter:on("equipStrengthen", checkObtainFashion)  -- 时装模块注册监听 ------------------------------------------------------------------------------------ function main()     equipStrengthen() end  main()
  最后输出: checkAchievement checkObtainFashion
  下面这个图可以有助于理解,
  上述的实现比较简单,主要意思表达出来了,具体的细节可以结合需要再添加就好了。
  如果觉得对你有帮助的话请@程序员杨小哥 点个赞,谢谢!

全新石墨工艺散热一加Ace发售,一加9沦为弃机,不买就亏大了这几天最火的手机选择之一一加Ace平民价格新机搭载定制版天玑8100MAX芯片,这几天最火的手机选择之一一加Ace平民价格新机在GPA稳帧技术图形异构技术的加持下,这几天最火的手机索尼新机突然官宣4K骁龙8独立拍照按键,5月11发在国内手机市场中,大多数用户熟悉的厂商基本上都是华米OV,然后是一些子品牌,或者是realme魅族等厂商,其余厂商的热度都不是特别高。而对于海外手机厂商来说,熟悉的基本上都是苹果手汇川技术一季度盈利7。17亿拟30亿加码新能源汽车业务长江商报消息长江商报记者张佩国内工业自动化领军企业汇川技术(300124。SZ)加码新能源汽车领域布局。最新公告显示,汇川技术拟投资不超30亿元,投资建设新能源汽车核心零部件项目(全国首个省级车载政务服务平台上线!粤优行实现车上办政事21世纪经济报道记者张雅婷广州报道4月28日,广东省政务服务数据管理局在广州广汽中心发布全国首个基于车载使用的移动政务服务平台粤优行,率先将政务服务创新应用延伸至群众出行领域,全面马斯克自称想收购可口可乐!C罗却躺枪!因为他移动过可口可乐原创根据4月28日的报道,在4月25日收购了推特的特斯拉CEO马斯克在自己的新收入产品推特上发表了自己的另一个宣言,那就是收购可口可乐。马斯克在推特上这样写接下来我要收购可口可乐!苹果第二财季营收和盈利均超预期盘后股价涨超3苹果第二财季营收和盈利均超预期盘后股价涨超3财联社4月29日电,苹果公司第二季度营收973亿美元,预期939。8亿美元,同比增长近9第二财季利润为250亿美元,合每股1。52美元,vivoX80与x80pro差距这么多,3699米起价你还觉得香吗?VIVOX80系列开篇老规矩,上配置图第一张,X80配置图。第二张,X80pro配置图两者的主要区别是内存方面X80pro最低是8256G版本,而vivoX80最低是8128版本,造车,还是放火?小鹏别膨(上)人往高处走。这句话没错,可高处毕竟诱惑多,虚无缥缈的东西多,一不留神难免傲睨一世。或许是少被推敲的高数据使然,近来,由于逐渐在国内新能源汽车新势力群体中拔得头筹,甚至取代了蔚来和理想做智能家居,到底是选华为还是小米好?作为一个智能家居爱好者来说,华为小米各有各的优势,小米的生态链已经很庞大,华为也后来居上。而其他一些智能家居品牌其实不太建议去选择,实际上他们主要在做灯光窗帘等系统的自动化,而并非红米新机或命名Note11T,LCD党的最爱来了如今手机市场销量持续低迷,手机厂商为了销量,各种内卷机型层出不穷。曾经在千元机叱咤风云的红米,现在也不能一家独大。真我Q系列崛起之后,处处针对红米NOTE系列。最近真我Q5系列号称外观对标iPhone,小米12Lite将至,一亿像素镜头67W快充小米科技去年年底推出了12系列旗舰手机,并且宣布对标苹果该系列中的小米12和iPhone13一样都是小屏旗舰手机,小米12的机身宽度小于iPhone13,但显示屏尺寸却达到了6。2
136号段手机用户反映收到奇怪数字短信,联通客服回应暂未有类似反馈三言财经4月29日消息,有不少网友反映,昨晚收到了奇怪的短信。短信内容是一连串1234567890的重复数字,而且值得注意的是,收到奇怪短信有136137号段,而且从网友反映来看以有方科技披露2021年年报实现营收10。25亿元4月28日,资本邦了解到,A股上市公司有方科技(代码688159。SH)发布2021年全年业绩报告。2021年1月1日2021年12月31日,公司实现营业收入10。25亿元,同比增全国多地网友收到诡异号码发来乱码短信!会有影响吗?客服移动联通正在协查中昨晚,不少网友发帖表示,自己收到了一条诡异的数字短信,短信内容是1234567890123456。更奇怪的是,发送短信的号码和自己的号码只有一个数字不同,一个130开头,一个136通胀环境下,囤积大量现金对苹果来说是个问题文EffiBenmelech在过去的几个季度里,美国通胀率达到了几十年来未见的水平。这些通胀压力正在影响消费,导致一些企业削减了生产订单。然而,高管与投资者忽视了通胀带来的另一个重全套小米不可取,但这几款值得购买我可以很负责任地说,大部分人都或多或少用过小米米家品牌的产品。尤其是电热水壶吹风机和电磁炉,经常出现在各种民宿酒店当中。而这也侧面印证了那句不知道买什么的时候看看小米准没错!米家的别再乱买电视了,这3种才是电视的正确选择最近,电视以这样的方式火爆起来,出乎所有人的意料,电视成为了最抢手的电器。以前电器三大件,电视冰箱洗衣机,电视的保有量最高,使用频次也最多。随着手机平板电脑等智能电器普及,获取资讯苹果买了17颗卫星!iPhone14卫星通话稳了?简单来说,就是iPhone即使在运营商网络没有覆盖的地方,像是无人区高山荒漠等等,也可以进行紧急通话。听起来很牛X,但实际上不是你想的那样。彭博社MarkGurman认为,下一代i国内首个乘用车无人化运营试点在北京开放来源人民网人民网北京4月28日电(池梦蕊)4月28日,北京市智能网联汽车政策先行区乘用车无人化道路测试与示范应用管理实施细则(以下简称实施细则)正式发布,在国内首开乘用车无人化运营2021北京软件和信息技术服务综合实力企业(八十五)北京信安世纪科技股份有限公司发布日期20220429来源北京软件和信息服务业协会企业简介北京信安世纪科技股份有限公司(简称信安世纪,股票代码688201)成立于2001年8月,是科学技术部认定的国家级高新技术荣耀今年将进行上市筹450亿美元华为的手机品牌荣耀(Honor)考虑2022年在国内上市,估值450亿美元。有媒体追问是否会针对计划上市,估值450亿美元作出回应,荣耀表示不再回应,仅以之前的对明显错误报道的回应新鲜早科技丨网易云音乐炮轰腾讯音乐侵权,后者称前者是碰瓷荣耀辟谣赵明卸任总经理传闻高塔半导体股东会批准其被英特尔收购协议21世纪经济报道数字经济课题组综合报道早上好,新的一天又开始了。在过去的24小时内,科技行业发生了哪些有意思的事情?来跟21tech一起看看吧。巨头风向标1网易云音乐炮轰腾讯音乐侵