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

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

  今天总结一下游戏架构中的事件触发机制,游戏架构中为什么需要由事件驱动。
  主要是为了解耦,所谓高内聚,低耦合,如果不采用事件驱动的方式,则会像下面这样来写代码。
  比如说,游戏内有多个玩法模块,"玩家"在打造装备的时候,可能触发"装备打造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
  下面这个图可以有助于理解,
  上述的实现比较简单,主要意思表达出来了,具体的细节可以结合需要再添加就好了。
  如果觉得对你有帮助的话请@程序员杨小哥 点个赞,谢谢!

微软妥协,安卓开发与Windows重要度平等,多设备协同是目标Android和iOS已经毫无疑问成为智能手机的两大主要阵营,曾经的黑莓和微软都想要成为与Android和iOS齐名的第三大移动端操作系统,但遗憾的是用户最终抛弃了它们,毕竟黑莓系大厂为什么会大裁员?真实原因只有一个镰刀增加而韭菜在减少这几天今冬的裁员成了网上最火的热门,几乎所有人都在调侃说好的不抛弃不放弃呢?而且据说不只是今冬几乎所有互联网大厂都在裁员,各种分析接踵而至,其实在我看来真实原因就只有一个这些年镰刀哪些商品适合在拼多多上购买?拼多多在2019年的总成交额突破了10000亿人民币,市值已经突破了500亿美元,用户超过了4亿。拼多多已经是淘宝京东之后,国内的第三大电商。不过,由于前期爆发式增长,曾经导致拼多关于苹果iPhone14和屏下FaceID都有了准确消息,是你期待的吗?不谋而合,苹果屏下FaceID功能实现时间就这样被曝光了根据之前曝光的消息,苹果近期在打磨前置摄像头的FaceID,也就是说将带口罩解锁功能发挥到极致,继续发挥前置摄像头的功能,苹深入体验微软电脑管家不知道为何,近几年微软老不按套路出牌,Windows10系统推出了好多年,依然不伦不类,BUG多,主业做不好,还老是弄软件来抢其他人的饭碗,现在微软又推出了电脑管家。微软电脑管家官峰米T1私人电影院搬回家首先给大家介绍一下峰米T1这款产品,峰米这款采用了ALPDRGB全色激光显示技术,加上2800ANSI流明画面亮度,可以说画质表现相当惊艳,超高清分辨率4K(38402160)28为什么思皓E10X那么值?传统燃油车的三大件很重要,同样的我们新能源汽车最重要的就是三电系统!下面小编就为大家介绍下我们思皓新能源的三电系统,思皓是德国大众与江汽集团的合资品牌,在三电技术方面也融合了双方多面向对象编程三大特性封装继承多态一封装封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽京东为何会进行大规模裁员,京东到底遭遇了怎样的危机?近段时间,京东大规模裁员事件登上了热搜,那么到底京东为何如此大规模的裁员,京东到底遭遇了怎样的危机?京东到底怎么了?京东去年的年报2021年总收是9515亿,拼多多是939亿,阿里科学家更新了人类发给外星人的信息最新制作的发向太空的信息的一部分含有男女人类的形像和DNA双螺旋结构。美国宇航局(NASA)的几位科学家新制作了一条使用射电望远镜就可以向太空发射的信息,并给它取名为星系中的灯塔(国际监管动态英国将对云计算和存储研发减税,美国拜登政府发表针对数字资产的行政命令国际组织1。促进高效跨境CBDC支付,BIS完成通用平台原型开发2022年3月22日,国际清算银行(BIS)创新中心澳大利亚储备银行马来西亚中央银行新加坡金融管理局和南非储备银行联
最早iPhone14就能用了!苹果被曝或推出硬件订阅服务随着时代的进步,智能手机的售卖方式也在不断发生着变化。比如,智能机刚开始出现的时候,最流行的是合约机,也就是那些年常说的充话费送手机。虽然后来逐渐不流行了,但是却留下了不少名梗,其运动手环推荐大家好,我是小温。现在越来越多人注重运动这一块,运动手环的出现可以实时代替生活中我们看不到的内容。小温为大家带来几款性价比较高的运动手环。OPPO智能手环,我认为这款手环性价比较高安洁科技董秘氢燃料电池核心零部件目前正在研发及产能建设中安洁科技(002635)03月28日在投资者关系平台上答复了投资者关心的问题。投资者请问董秘您好贵公司有哪些核心技术是全球领先的?是否有控股子公司被评为或获得专精特新小巨人?安洁科国信期货崔谷纯秉承技术引领业务理念加强打造信息技术核心竞争力中证网讯(记者周璐璐)国信期货2018年4月成立电子商务部,由6人组成的业务团队在客户开发客户开户技术运维系统开发等方面各司其职,通力合作。技术如何给传统经纪业务赋能,期货电子商务欢迎购买华为4G手机如果你的钱是大风刮来的,本文不适合你阅读,欢迎你去购买某位网友口中的苹果8G手机。一没有网络,只有手机,这样的手机你会买吗?网络重要,还是手机重要?估计读者莫衷一是!我认为网络比手社交电商的四种典型商业模式实体经济双重受挫的后疫情时代,思购臻选社交电商社交电商有哪些模式,各自的特点是什么?社交电商不是简单的社交电商,它的形态可分为很多种第一种电商社交电商社交的模式主要有两种一种是本来画风反转!一年给骑手补贴近140亿,美团竟成了良心企业?在曾经,一提起美团,骑手消费者和商家都是口吐芬芳,消费者认为美团上面的商品定价远高于线下,骑手则认为美团不断缩减送餐时间来压榨他们的体力,而商家则觉得美团抽成太高,卖一单就亏一单。部分地区楼市成交有所回升!多个互联网巨头被曝大裁员1,十大券商政策底市场底已经出现,A股将逐步企稳并进入中期上行通道A股已从情绪驱动回归基本面驱动的常态,并将进入政策的关键发力期近两周来疫情对经济影响较大,稳增长政策发力的必要性和红米K50Pro和小米11价格差不多,怎么选择?建议选择红米K50Pro,去年小米11的口碑实在太差了,由于火龙888的影响,烧WiFi日常发热问题比较严重,前期销量虽然不错,但后期口碑崩盘了。而红米K50Pro的天玑9000在使用Selenium抓取zabbix性能监控图概要老样子先来个概要,因为公司一直都子使用企业微信,前两天刚刚将所有zabbix的告警信息接到微信上,总感觉还差那么一点,就想着就高等级的告警加上一个性能监控图,这样只看告警信息大曝接近真全面屏三星S23Ultra,三星S22彻底让路,价格突然骤降曝光不负众望为行业带来更有创新力三星S23Ultra机皇的渲染图流出,曝光不负众望为行业带来更有创新力三星S23Ultra机皇设计上有了跨越式提升。曝光不负众望为行业带来更有创新力