天天看點

CreatorPrimer | 元件編碼心得(中)1. 功能型元件設計思路2. 控制型元件設計思路3. 小結

接上次教程中的内容,講到功能型元件與控制型元件,這裡再簡單回顧一下他們的要點:

CreatorPrimer | 元件編碼心得(中)1. 功能型元件設計思路2. 控制型元件設計思路3. 小結
  1. 功能型元件:以裝飾宿主節點為己任,常用的有Sprite、Labe、Widget屬于這類。
  2. 控制型元件:管理和控制子孫節點,比如:ScreollView、ToggleContainer,它們内部是由多個子孫點節點組合而成。

今天分享我在元件編碼上一點經驗,供大家參考。

1. 功能型元件設計思路

核心:以裝飾宿主節點為己任

具體要怎麼去做呢?我下面整理了三個要點:

  1. 專注自身節點和目前元件對象自己,盡可能少的去控制其它的對象。盡可能少不是說不能控制,比如cc.LabelOutline,它需要依賴cc.Label元件控制Label的渲染;實體碰撞元件需要依賴剛體元件。
  2. 謹慎設計properties屬性,減少對外部元件、節點、資源的依賴,也就是說對遊戲設計師無用的屬性都不要暴露到屬性面闆上。元件暴露的接口不應該是程式員相當然的,而是對遊戲内容設計相關的屬性才應該暴露到屬性面闆上。
  3. 功能型元件内部代碼中杜絕對外部場景樹的假設,避免出現cc.find、getChildByName等方法擷取外部節點。

功能型元件一般會以純腳本形式存在,如果做到了以上三點,我們編寫的元件就可以像引擎内置的元件一樣可以被随處使用了。甚至還可以跨越不同的項目,Shawn在CreatorPrimer配套代碼倉庫中的元件大多都是這類,供大家參考:https://github.com/ShawnZhang2015/CreatorPrimer.git

在實際項目中,不可避免的會存在有互相依賴的元件,比如:上面代碼中的幾個實體元件。 Shawn建議将有互相依賴的元件代碼,歸類存放同一路徑友善管理。

功能型元件,我們提出了不少制約條件,它隻能解決功能點的問題,

而不能解決,業務流程、相對複雜邏輯問題。這些問題的處理辦法

我們需要使用控制型元件來完成。

2. 控制型元件設計思路

核心:管理和控制子孫節點

控制型元件,他的職責沒有像功能型元件那麼單純,還需要從他們内和外兩方面來進行說明。

控制型元件對内要點

CreatorPrimer | 元件編碼心得(中)1. 功能型元件設計思路2. 控制型元件設計思路3. 小結

控制型元件對内它管理和控制子孫節點,這是劃定了他的控制的範圍,不是兄弟、父級元件。其次,控制型元件管理的手段是調用子孫節點上的元件方法、屬性或監聽子孫節點發出的事件,盡量不參雜功能細節上的代碼,這些應該交由子孫節點或元件完成。

控制型元件對外要點

内部安定好,我們看怎麼面對外部,看下圖:

CreatorPrimer | 元件編碼心得(中)1. 功能型元件設計思路2. 控制型元件設計思路3. 小結

站在更高的層次去看控制型元件,它也可以被上層控制元件所管理,從上層視角看控制型元件也是功能型元件,解決點上的問題,比如最常見的:cc.ScrollView。

控制型元件同樣遵守部分功能型元件的一些規則:

  1. 不要暴露内部節點群組件,也就是說,不要為了在代碼中通路内部子節點或元件友善,将它們設計成properties屬性,他們對遊戲設計師沒有任何幫助,反面形成了幹擾,這裡需要關注的是封裝性。
  2. 控制型組通常會與預制件結合形成獨立的子產品,并能與其它元件互相組合嵌套,形成更複雜的業務子產品,以達到子產品化能力。

以這種方式設計元件,盡可能為項目生産出一個個相對獨立的子產品,再以各個子產品搭建完整的遊戲。

3. 小結

本篇主要介紹了功能型元件與控制型元件的一點心得,最為主要的還是對面向對象設計原則的應用。下一次繼續為大家分享,控制型元件與與預制件編輯的一些心得,歡迎關注。

如果覺得公衆号上的文章對您或您身邊的朋友有幫助,請分享給他們,願我們一起成長!

CreatorPrimer | 元件編碼心得(中)1. 功能型元件設計思路2. 控制型元件設計思路3. 小結