組件的概念,只是在我們項(xiàng)目中的稱(chēng)呼。至于其他人怎么稱(chēng)呼這種模式,我則不是很清楚。如果這個(gè)名字不對(duì)的話(huà),請(qǐng)告訴,我在文檔中修復(fù)。免得影響其他人的認(rèn)知。
其實(shí)我本無(wú)意寫(xiě)這篇文章。因?yàn)樵陧?xiàng)目中引入這個(gè)想法的人并不是我,所以我覺(jué)得整理其他人的想法,沒(méi)有任何意義。不過(guò)。組件的后期改動(dòng)我有相當(dāng)程度的參與,并且Update的更新模式是我進(jìn)行修改的,并且我已經(jīng)寫(xiě)了一篇文章描述這個(gè)變化的過(guò)程,有人表示看不懂。所以,就補(bǔ)上一篇組件的說(shuō)明。

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

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

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

組件設(shè)計(jì)

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