組件的概念,只是在我們項目中的稱呼。至于其他人怎么稱呼這種模式,我則不是很清楚。如果這個名字不對的話,請告訴,我在文檔中修復(fù)。免得影響其他人的認知。
其實我本無意寫這篇文章。因為在項目中引入這個想法的人并不是我,所以我覺得整理其他人的想法,沒有任何意義。不過。組件的后期改動我有相當程度的參與,并且Update的更新模式是我進行修改的,并且我已經(jīng)寫了一篇文章描述這個變化的過程,有人表示看不懂。所以,就補上一篇組件的說明。

常規(guī)的設(shè)計

一般情況下,內(nèi)容的設(shè)計會把一個對象的內(nèi)容完全封裝到一個對象中(哈哈,當然如果是按照面向?qū)ο蟮姆绞絹韺崿F(xiàn)的)。讓我們來暢想一下一般情況下一個對象都會有什么東西。位置的移動(基礎(chǔ)、移動、減速、加速等)、傷害邏輯(爆炸、碰撞傷害)、對其他內(nèi)容的影響邏輯(擊退、斥力盾啥的)、位置的顯示、附屬組件的位置調(diào)整。一般情況下,這些功能會把公用部分放到合適的位置,比如說移動部分的代碼基本上所有的東西都會有,所以這部分內(nèi)容會添加最基礎(chǔ)的組件比如說放置到最基礎(chǔ)層面的Objectbase。算了上個插圖。

為了實現(xiàn)功能就需要將核實的功能放到合適的位置去,比如說,位置移動的功能?;旧纤械膶ο蠖加?,那么基本上這個功能就需要放到ObjectBase中。攻擊范圍的概念基本上只有怪物才會有,那么這部分功能就需要放到怪物層級上。彈幕上的功能則相對比較復(fù)雜。普通彈幕很簡單,就是普通的東西。但是爆炸的彈幕則需要添加上爆炸的邏輯。追蹤的彈幕則需要添加上追蹤的邏輯。如果一個彈幕既有爆炸又有追蹤。那么使用面向?qū)ο蟮姆绞絹磉M行設(shè)計。這個地方就有兩個個選擇了,1 父類實現(xiàn)相關(guān)的內(nèi)容,子類選擇性的使用。但是因為子類的變動而影響到了父類,這違反了開閉原則對吧?;蛟S,你覺得違反原則,這個并不重要。但是父類頻繁的變更,會給子類帶來莫名其妙的BUG這個時間長了,你就會有體會了。;2 子類實現(xiàn)自己的東西。如果選擇其中第二種方式。那么相同的功能則需要抽離出來,想使用這塊功能的單獨使用這塊功能對吧但是這個違反了面向?qū)ο蟮乃枷雽Π伞?

組件設(shè)計

好,既然面向?qū)ο蠼鉀Q這個問題存在困難。那么我們就換個思路,就是剛才我們剛才提到的第二種解決方式。如果所有的功能我們都進行抽離出來,你想用的時候直接掛在上這部分

網(wǎng)友評論