天天看點

Delta3D 引擎 架構 結構分析

Delta3D 引擎 架構 結構分析

在上層設計中,Delta3d引擎 設計非常簡單,隻包含了三個主要部分。最中間是“GameManager”,主要負責管理角色Actors和消息分發。GameManager是Actor和Component兩子系統通信的管道。

引擎中的第二個子系統是GameActors。GameActors是仿真環境中的實體,進一步又可以分為兩個小部分:代理Proxy和角色Actor。actor是實體對象, actor隻包含很少一部分内部分内部邏輯,也可以通過actorcomponent添加一些額外功能邏輯。proxy的存在可以透明地通路網絡,并為GameManager和其他工具tools(如STAGE)提供了一個通用的通路資料的接口。

引擎中的第三個子系統是“Component”。Component接收消息,并針對這些消息做出相應的邏輯。例如可以執行發送網絡資料、更新player的分數等。

Delta3D 引擎 架構 結構分析

Actors是仿真環境中的實體,actors和proxy可以通過繼承關系獲得相應的功能。在建立一個實體時(最終的建立必須通過ActorPluginRegistry或LibraryManager建立的 參見http://blog.csdn.net/zhuyingqingfen/article/details/19497497),必須建立兩個對象,一個是actor本身,另一個是proxy。proxy存儲了一個actor希望暴露給外邊的屬性。這樣其他的工具tools(如STAGE)就可以通過proxy擷取actor的屬性,并對其進行操作。

Delta3D 引擎 架構 結構分析

Component子系統含有消息處理功能,提供了一個很強大又很靈活的方式來向Game Engine中添加新的功能。在上面可以看到一些Delta3D内置的component。例如一個BaseInputComponent提供了處理滑鼠鍵盤點選的能力,遊戲開發者可以擴充這個元件來添加一些類似“點選空格鍵進行射擊“的功能。

一個component 隻用來監聽消息,然後針對消息執行相應的邏輯。遊戲開發者可以通過component的方式來實作一些如”遊戲規則“,”網絡資料收發“等。元件時應用程式添加新的功能變得非常簡單。

性能:對于Actors,由于其的多繼承原因,并沒有太好的辦法來充分分離功actor的能函數來利用多核CPU計算。而對于Component ,将很容易充分利用多核CPU的功能,就目前來看,components之間還沒有太大互相之間的依賴關系(降低充分利用CPU的能力),不過有一些是必須依賴的如你在執行”Networking Component“之前要先執行”Rules component“元件。

可修改性:component的設計使得Delta3D的可修改性大大提高,例如如果你不喜歡内置的network component ,你完全可以寫一個你自己的network component ,而不用修改太多引擎本身。但由于actors的渲染和實體功能是通過繼承實作,這就意味着如果你想移除渲染的OSG或者實體引擎 ODE,或者擴充這些功能,那麼你必須付出很大的代價了。

可移植性:Delta3D所依賴的第三方庫都是跨平台的,可以在window、Linux上 運作,在mac 上目前還沒有得到官方的回應。

可重用性:component的可重用性在基于Delta3d的工程中很容易(可以直接把一個工程中的component 用到另一個工程中),而actor是在繼承關系上是可重用的。

開發周期:這個對Delta3d來說是非常好的因為它内部已經包含了相當大的一部分功能。開發者隻要要開發自己的actor實體,提供相應的component即可,是以利用Delta3d開發項目可以大大提高效率。

概念的完整性:這個是Delta3d不太好的地方。引擎有着很簡單的概念,但又提供了一個混合的消息來擴充引擎功能。例如,如何為我的遊戲人物中添加AI功能?如何為我的actor對象添加新的渲染和實體功能?像網絡和規則都是用”components“來實作。我個人認為,他們應該把功能從從actors的繼承關系中分離開來,全都用component的方式實作。Unfortunately, I am not emperor of the world – so no one asked me ☺.