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

歡迎光臨散文網(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框架。

組件模式的評論 (共 條)

分享到微博請遵守國家法律
富裕县| 宝兴县| 溧水县| 民和| 五大连池市| 海口市| 武鸣县| 南江县| 石景山区| 曲阳县| 莎车县| 四川省| 祁阳县| 昭觉县| 来安县| 沾化县| 依安县| 马鞍山市| 亳州市| 岗巴县| 南岸区| 松桃| 白沙| 时尚| 阳江市| 祁阳县| 佛坪县| 蒙山县| 开远市| 历史| 平湖市| 钟祥市| 平度市| 大同县| 横峰县| 张家川| 静乐县| 岱山县| 洪雅县| 勃利县| 阜南县|