当前位置: 首页 > news >正文

Nebula3中的Message

最近心情不好, 一直没学习-_-

今天是近期最后一个双休, 玩够了就看看代码吧

本来是计划看模型部分的, 无奈现阶段N3中的模型还是用的N2的, 作者又说N3的新版本近期内会出来, 所以先放一放, 新的版本很可能包含N3的模型/动画部分, 到时再看也不迟

Message嘛, 我觉得是整个N3中最为核心的部分, 虽然没几个类, 但可以是说整个N3的精华所在. 为什么这么说呢? 看看它有多少多少类从Port派生的(这图不全):

可以说, 每个部分都与它息息相关.

那, Port是什么? 看下图:

Message比较好理解, 它就是一个事件, 或是一个操作. 其实就是设计模式中的Command模型, 但N3中的Command成了脚本库和数据库的指令了, 所以只好改叫Message(xoyojank: 我瞎猜的).

有Message必须有Handler来进行处理, 那Port就好说了, 它就是Message的接收器, 包含了一堆的Handler来处理消息. 有一个异步的Port实现叫AsyncPort, 它是所有Fat线程子系统接口(XXXInterface)的基类, 有自己的线程而已. 功能上来说, 跟Port一样的.

还有个Dispatcher. 其实它也是一个Port, 但是包含了许多个别的Port. 存在的意义在于把复杂的消息处理机制隐藏掉, 给外界留一个简单的外表. 这个在逻辑部分(即N3的Application层)用的比较多, 能把逻辑部分抽像成这样的游戏我还真没怎么见过. (题外话: 我觉得这也是N3跟OGRE之流差别最大的一个地方: 它是一个游戏引擎, 不仅仅是图形引擎)

还有一点值得注意, 那就是Message预留了二进制序列化的接口, 这意味着可以把消息写入流进行转输. Sep2008版本中加入的Remote子系统就是它的应用, 可以远程操控应用程序, 很酷的一个特性.

其实, 我感觉N3中所有的模块都是基于一个思想, 那就是任何的操作, 都有一些相关的消息, 和对应的处理者来执行. 可能有人会觉得这样不如直接编码一个函数调用来得简单, 但是扩展性和可复用性大大地增强了. 无论对于脚本化还是多线程化来说, 这都是非常方便的.

期待N3未来的表现, 因为它不输于任何一个商业引擎! 商业引擎强大在配套的工具上, 但是架构上跟N3相比, 还是有些差距的(至少UE3和GB个人认为不如它)

相关文章:

  • HttpHandler 异步监听请求
  • 互联网进军影视作品的软广告
  • JS 动态增加DIV 的大小
  • 在UltraWebGrid中验证填入数据
  • HTML5 拖拽图片到网页内
  • HTML5批量拖拽图片到网页
  • [创业] 美国硅谷风险投资行业的详细报告(2008年第四季度)
  • C# 异步调用代理类
  • C#事件和委托的基础知识模型
  • 异步发送HTTP请求
  • Flex开发流程设计器的经验之谈(2)
  • html5 涂鸦板
  • [IE编程] IE中使网页元素进入编辑模式
  • linux命令练习 笔记
  • [IE技巧] IE 中打开Office文件的设置
  • hexo+github搭建个人博客
  • Angular4 模板式表单用法以及验证
  • Angularjs之国际化
  • Intervention/image 图片处理扩展包的安装和使用
  • java取消线程实例
  • js操作时间(持续更新)
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • mysql外键的使用
  • oldjun 检测网站的经验
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Webpack 4x 之路 ( 四 )
  • 来,膜拜下android roadmap,强大的执行力
  • 悄悄地说一个bug
  • 一份游戏开发学习路线
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 函数计算新功能-----支持C#函数
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #Linux(帮助手册)
  • (3)llvm ir转换过程
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)windows配置JDK环境
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (转)jdk与jre的区别
  • (转)Linq学习笔记
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .Net MVC + EF搭建学生管理系统
  • .NET Standard 的管理策略
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @Autowired @Resource @Qualifier的区别
  • [1]-基于图搜索的路径规划基础
  • [Angular 基础] - 数据绑定(databinding)
  • [bzoj 3534][Sdoi2014] 重建
  • [C/C++]数据结构 栈和队列()
  • [C++打怪升级]--学习总目录
  • [CentOs7]iptables防火墙安装与设置