最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

組件模式

2023-03-01 14:37 作者:偽亂  | 我要投稿

在設計模式中有一個原則叫做合成復用。

在游戲編程領域中,常常需要讓一個對象實現(xiàn)熱插拔的功能。但是不能從代碼處進行熱插拔,因為這違反了開閉原則。

所以漸漸的基類的體量越來越大,形成了所謂的胖球。

當然我們也可以用裝飾者模式,來擴展對象的功能。



為什么要實現(xiàn)熱插拔,因為對于同樣的一個player實體,我們希望他有背包功能,也希望他有寵物功能。我們希望在特定的時候,禁止甚至沒有背包功能。

這個時候,就得掏出我們的組件模式了。

典型的組件模式就ECS。unity和ue的組件。

組件可以隨時隨地取消和掛載。

組件與組件之間完全可以獨立運行,但是通常有需要導致某個組件依賴于另一個組件

比如一個移動組件,往往依賴對象的transform組件

我們的技能組件也會依賴于數(shù)值組件。這種依賴是無法避免的。



我仿照著unity的組件,構(gòu)建了一個組件系統(tǒng)。

Entity和Component

entity只具備一個功能,保存Component的索引,并開放出組件的添加和獲得的接口。

Component的功能就更簡單的,如果不考慮生命周期,那么Component只需要持有entity的索引,以便獲得entity上掛載的其他Component來執(zhí)行來的邏輯即可。在子類中實現(xiàn)具體的邏輯。


ECS又怎么做呢?

將原有的Component拆分為Component和system。Component只具備數(shù)據(jù),system只處理數(shù)據(jù),這樣就可以把Component放在棧上去處理了。但是這需要特殊處理。目前我只能把Component放在堆上。

entity只具備一個id。在創(chuàng)建entity的時候,是通過entitymanager給與一個id。

entitymanager再通過這個ID來查詢對應的Component。

由于system和Component分離,因此system大量的使用了this的語法糖,從代碼側(cè)為為Component添加功能。每個Component都有一個對應的system。

從而讓ecs代碼,在調(diào)用上與以往一樣。只是代碼結(jié)構(gòu)有所變化

大功告成。沒有做數(shù)據(jù)整理的ecs框架。

組件模式的評論 (共 條)

分享到微博請遵守國家法律
奈曼旗| 高邮市| 阆中市| 呼和浩特市| 濮阳市| 鄂州市| 南城县| 乌拉特后旗| 石屏县| 东莞市| 东海县| 河东区| 万州区| 武宁县| 鲜城| 湘潭市| 柳河县| 蓝田县| 黄梅县| 鄂尔多斯市| 安吉县| 麻栗坡县| 峡江县| 镇安县| 淮滨县| 大埔区| 永宁县| 朝阳市| 上思县| 大港区| 舒城县| 纳雍县| 双江| 沛县| 连平县| 澄江县| 宁海县| 育儿| 桐城市| 宜城市| 锡林浩特市|