监听器在游戏开发中的应用消息回调

摘要:
在我们的游戏开发中,我们通常会遇到两个模块之间的通信。回调估计是最常用的方法。回调的设计思想非常简单,即两个对象相互注册,然后在必要时调用彼此的函数。然而,直接回调两个对象会带来许多不便。您可以考虑Windows中的通信机制:通过解析消息类型进行处理。是的,消息回调的优点是易于扩展。这种模式在OGRE或一些广泛采用面向对象思想的源程序中随处可见。

我一向是不太喜欢给一些东西强加上个名字。但为了随波逐流,我还是这样做了。

在我们的游戏开发中,通常会遇到两个模块之间的通信。 回调估计是最常用的方式了。 回调的设计思想很简单,就是两个对象相互注册,然后在需要的时候调用对方的函数。

如下:

这样,当A执行自己的某些动作的时候,就调用B的函数,这样B就会进行自己的更新或是一些处理。

但是,由于两个对象的直接回调,导致了许多不方便之处。特别是当A和B的功能需要扩展的时候。例如:现在A在执行过程中,需要调用B中其它的功能函数。这时候就不得不修改A和B的接口。然后大家都重新编译,连接,执行。

于是,我们就会想会不会有一种更好的方法来解决这一问题。 大家可以想想,WINDOWS中的通信机制:通过解析消息类型来进行处理。是的,消息回调的好处就是方便扩展。 当然我们这里要讲的不是像WINDOWS中那样的消息通信机制,对于我们来说,那种做法过繁琐。

假设现在是想让A通知B一些事情。那么,我们可以把B的void DoB();函数作一点点修改:

同理,当B要通知A的时候,也这样做就行了。

但是,这样也很麻烦,关键在于,如果现在写类A的人并不知道类B的人会怎么写,或者说,类B不知道什么时候要写。另外,如果我们强制类B要实现这样的接口,会有点不现实。

此时,我们决定使用一个中间对象来连接他们。


这就是我们传说中的监听器了。 在OGRE或是一些广泛采用面向对象思想的源程序中,随处可见这样的模式。

还是假设是A需要通知B一些事情。那么,可以在A中注册这个对象,然后调用它的方法就可以了。

而我们在实现B的时候,除了要实现B自己的东西以外,还需要将ICallBack派生并实现 void Do(int Msg)函数;

这样,双方便很自然地通了信。而写类A的人根本不需要理会类B的人会怎么写,也不用去管类B会是什么样的类名。只要告诉写类B的人,你需要实现这个Callback接口,并且对应的MsgID是干什么用的就OK了。

也许初初的一看,这是吃力不讨好的工作。毕竟一个写A的人,会去想那么多事情。 而一个写B的人,还要去实现一个Callback类。但是,从可扩展性,和降低耦合上来讲,的确会起不少的作用。

而上面的void Do(int MsgID);函数,可以做得更强大一点。

写成void Do(void* pData); 而这个pData怎么使用,就要看A和B通信的具体内容了。

我正尽力地试着把自己想要说的讲清楚,谢谢!

免责声明:文章转载自《监听器在游戏开发中的应用消息回调》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Hadoop-2.X HA模式下的FSImage和EditsLog合并过程Mysql的悲观锁 你来聊一聊?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

EditText的监听器和自定义回车事件

我们一般是监听EditText的状态,看EditText中是不是有文字,根据有无进行不同的操作。 //给editText添加监听器 editText.addTextChangedListener(newTextWatcher() { @Override public void onTex...

Spring 中的观察者模式

一、Spring 中观察者模式的四个角色 1. 事件(ApplicationEvent) ApplicationEvent 是所有事件对象的父类。ApplicationEvent 继承自 jdk 的 EventObject, 所有的事件都需要继承 ApplicationEvent, 并且通过 source 得到事件源。 下列描述了Spring提供的内置事件...

PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例

新来了项目,需要能监听指定微信群的消息并进行转发。基于 PHP 7 的 web 微信机器人 Vbot 可以满足需求。Vbot 本质上就是实现了登录网页版微信来进行自动回复、群管理等等操作。 github 地址:https://github.com/hanson/vbot,官网地址:http://create.hanc.cc/vbot/。 安装 环境要求:...

阿里云PTS分享-用性能测试工具JMeter实现基于供应链业务上对于WebSocket 协议的压测

性能测试PTS(Performance Testing Service)是面向所有技术相关背景人员的云化性能测试工具,孵化自阿里内部平台。有别于传统工具的繁复,PTS以互联网化的交互,面向分布式和云化的设计,更适合当前的主流技术架构。无论是自研还是适配开源的功能,PTS都可以轻松模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本。更是紧密结合监控...

给11gR2 RAC添加LISTENER监听器并静态注册

之前有同学想要给11gR2的RAC添加LISTENER监听器,查看了listener.ora并发现问题: [oracle@vrh2 ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 04-DEC-2011 02:51:40 Copyright (c) 1991...

JavaWeb总结(八)

对象作用域    在Servlet里可以用一个名字绑定一个对象,并且在应用中传递和使用这个对象 作用域对象 属性操作方法 作用域范围说明 ServletContext(上下文) void setAttribute(String,Object) Object getAttribute(Sting) void removeAttribute(Str...