前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nebula3中的Entity

Nebula3中的Entity

作者头像
逍遥剑客
发布于 2018-05-23 07:56:26
发布于 2018-05-23 07:56:26
36000
代码可运行
举报
运行总次数:0
代码可运行

N3架构上是分了三层的, foundation, render, application.

一直以来看的都是foundation和render, 上层的一直没怎么看

今天大体上浏览了下, 感觉东西还是满多的

很多引擎都没这一层的, 如果没有实际项目的积累, 也没法抽象出复用的部分来

这里说的Entity不是GraphicsEntity, 而是Game::Entity, 代表游戏中的一个对象, 比如人, 道具什么的

一个Entity由以下几部分组成:

  • ID : 这个没啥好说的
  • AttributeTable: 属性表, 跟数据库绑定, 数据驱动的前提
  • Properties: 或许叫Component更合适, 组件模型, 现在大家都这么干了, 除了国内的人-_-

跟其他组件模型有点不一样的是, 如果想调用Entity中某个组件的功能, 直接发个消息给这个Entity就可以. 它自己找到处理这个消息的Property进行处理. 从这一点来说, Entity也是一个消息分配器(Dispatcher):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                                +------+  
                            +-->| Port |  
                           /    +------+  
            +------------+/     +------+  
--- Msg --->| Dispatcher |----->| Port |  
            +------------+/     +------+  
                           /    +------+  
                            +-->| Port |  
                                +------+  

实际上Property是从Messaging::Port继承的, 然后Port再把消息交给Handler去处理. 这样一来, 扩展功能只需要增加Message和对应的Handler就可以了.

想想N3中其实很多地方都用了消息, 比如多线程. 虽然这种方式解决了同步之类的烦恼, 但是也造就了Message满天飞的现象, 以至于他们写了个idlc来自动生成Message头文件...

在看WPF线程模型的时候, 突然想到, 是不是可以参考它的跨线程调用方法(Dispatcher.BeginInvoke)呢? 其实就是把调用函数变成一个delegate, 再加上参数, 一起装在一起加入队列. 本质上还是消息的形式, 只不过不用定义消息结构和写处理分支了. 坏处就是, 把调用细节暴露出来, 耦合度太大......

嗯, 跑题了

那个Property派生出来GraphicsProperty, TransformableProperty, CameraProperty, InputProperty, StateProperty等等. 想要显示在场景里就用GraphicsProperty, 想响应输入就加一个InputProperty, 诸如此类. 要调用其它Property的方法也不用从Entity中找到再cast什么的, 直接一个消息扔进去就完了...

另外属性表的应用和实现都比较复杂, 下回分解

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011年01月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode-33-搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
benym
2022/07/14
2430
搜索旋转排序数组(leetcode33)
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
Vincent-yuan
2022/05/06
2640
搜索旋转排序数组(leetcode33)
【刷穿 LeetCode】33. 搜索旋转排序数组(中等)
例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] 。
宫水三叶的刷题日记
2021/02/20
2690
【leetcode刷题】20T18-搜索旋转排序数组
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
木又AI帮
2020/02/25
2770
LeetCode 33. 搜索旋转排序数组
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
freesan44
2021/10/18
2890
LeetCode 33. 搜索旋转排序数组
搜索旋转排序数组
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
利刃大大
2023/04/12
3080
​LeetCode刷题实战33:搜索旋转排序数组
https://www.cnblogs.com/techflow/p/12441002.html
程序员小猿
2021/01/20
2240
​LeetCode刷题实战33:搜索旋转排序数组
Leetcode No.33 搜索旋转排序数组(二分法)
升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。
week
2022/01/07
1830
Leetcode No.33 搜索旋转排序数组(二分法)
leetcode-33-搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
chenjx85
2018/08/16
4000
LeetCode - #33 搜索旋转排序数组(Top 100)
我们社区陆续会将顾毅(**Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1]**)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/04/04
4180
LeetCode - #33 搜索旋转排序数组(Top 100)
【leetcode刷题】T9-寻找旋转排序数组中的最小值
今天分享leetcode第9篇文章,也是leetcode第153题—寻找旋转排序数组中的最小值,地址是:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/
木又AI帮
2019/07/18
4140
【leetcode刷题】T9-寻找旋转排序数组中的最小值
LeetCode: 153. 寻找旋转排序数组中的最小值
链接: https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/
用户3578099
2022/11/25
1K0
33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
张伦聪zhangluncong
2022/10/26
1520
33. 搜索旋转排序数组
( 例如,数组 0,1,2,4,5,6,7 可能变为 4,5,6,7,0,1,2 )。
Michel_Rolle
2021/03/02
2.6K0
每天一道leetcode-33
目前准备每天刷一道题leetcode的题目,以此来激励那些零基础入门的人,千万不要被什么科班和非科班的说法吓倒了,计算机这个行业只要你肯努力,没有什么逾越不了的鸿沟。
乔戈里
2019/09/17
2680
每天一道leetcode-33
从酒桌游戏看二分查找算法
酒桌上曾经玩过这样一个小游戏,游戏规则是:主持人每次随机从 1-1000 中选择一个数字,比如是 171。只有主持人自己知道并事先写在纸条上留存,然后分别让大家来猜,能够用最少次数猜到的人获胜并拥有指定一个人罚酒的权利。
童欧巴
2020/07/14
4960
搜索旋转排序数组(leetcode 33)
如数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2]。
恋喵大鲤鱼
2023/10/12
1930
搜索旋转排序数组(leetcode 33)
LeetCode-33 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7]可能变为 [4,5,6,7,0,1,2] )。
用户3470542
2019/06/26
1.2K0
LeetCode-33 搜索旋转排序数组
T11-搜索旋转排序数组
今天分享leetcode第11篇文章,也是leetcode第33题—Search in Rotated Sorted Array(搜索旋转排序数组),地址是:https://leetcode.com/problems/search-in-rotated-sorted-array/
木又AI帮
2019/07/18
3680
T11-搜索旋转排序数组
leetcode刷题(73)——33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
老马的编程之旅
2022/06/22
1710
leetcode刷题(73)——33. 搜索旋转排序数组
相关推荐
LeetCode-33-搜索旋转排序数组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验