GameFramework解析:事件(Event)
前言事件模块是游戏中很重要的一个模块,而GameFramework的事件模块在网上能找到很多文章,但基本都是讲解其应用方面的,并没有对其源码进行分析。这里阐述此模块通过如下三个方面:基本的类内信息说明,GF里面存储管理事件的形式,事件抛出和取消订阅的冲突问题。这里就不用应用举例了,有需要可以查看下面参考文档。 Event模块结构 从上面的结构图也可以看出,EventManager作为事件模块的管理器,其作用主要是对于EventPool的功能进行封装,并提供对应的接口给外部使用。因此本模块的核心逻辑主要在EventPool中。 EventPool作为事件模块的核心, EventPool处理着事件的发布、订阅、移除等功能的同时也会严格检查事件订阅的匹配情况,不允许出现重复订阅,也不允许出现重复取消订阅或取消订阅尚未订阅的事件处理函数,如果出现这些情况,将会抛出异常。观察者模式可以从“发布者”和“订阅者”两个角度来看,EventPool里面对应的两个方面便是 “事件” 和 “事件处理函数”...
C#:委托与事件
前言因为接下来想要整理一下游戏里面的事件模块,而当前项目的业务开发都是通过 Lua 进行的,有一阵子没有写 C#了,回想 C#的委托和事件,有些细节一时模糊了起来,所以打算干脆把相关的知识点整理一下,就当做复习了。 委托什么是委托无论是委托还是事件官网都没有一个简单直白的定义,只能说理解万岁。 委托:用于封装方法的一种引用类型,类似于 C++的指针,但其类型安全可靠。通过封装多个方法到一个变量中,调用此变量就可以调用所有绑定的方法。你也可以将它理解性地看做“方法的容器”。 委托的写法12345678910111213141516171819202122232425/// ---- 普通写法------// 1.定义委托类型,这一步定义的是委托的类型,并不是委托的实例public delegate void MyEventHandler();//2.定义委托变量public MyEventHandler MyEvent;//泛式委托public delegate void MyEventHandler<in T1, in T2>(T1 arg1, T2...
兴趣使然地开通了自己的博客
随着一个念头的油然而生,此个人博客也被孕育而出。 目的 创建一个能自我表达的地方。不知数年过去,想到此番此景又会有何感悟。 记录并分享学习到的知识点。本人之前的笔记基本上是写在 Notion 上的,笔风相当随意,以自我理解为主要目的。查找资料的时候会看到各种各样的文章和写法,有的大佬的文章对于知识点研究之深,拆解之详细且通俗易懂,让人直呼牛逼,恍然大悟之余也会对所有愿意分享的人心生感谢。倘若自己也能效仿尽一份力,锻炼自己表达能力的同时,也能帮助到他人,则是不胜荣幸。 博客的搭建本博客使用 Hexo...