2013-07-25 56 views
0

在過去的幾天裏,我找到了基於組件的實體系統。 我想我理解並知道它是如何工作的,但是如果我嘗試實現它,我會遇到很多問題。 這裏有一個最具問題的圖表: http://s7.directupload.net/file/d/3327/pzy7kanj_jpg.htm 我想知道,我可以將同一個元件兩次添加到一個實體,還是我不應該允許這個? 如果不是,我如何可以將多個精靈添加到實體? 如果生成CollisionComponent或Physik Component,則Physik和MoveComponent必須進行通信,對嗎? 我希望任何人都可以幫助我。基於組件的實體系統問題

我在這裏取得了另一個圖表,從思路: http://s1.directupload.net/images/130725/5p83qysu.jpg

回答

0

好,似乎有很多的這篇文章,您鏈接到圖表之間的相關問題。這些問題的答案是「取決於」。我猜你希望獲得關於CBSE主題的一些指導,而不是單行解答所有問題。與其嘗試回顧基於類似查詢的討論,我會在此發佈一些鏈接,以便讓您更深入地思考這些問題。

首先是ES wiki。這個wiki仍處於起步階段,但它對實體系統進行了很多討論。

接下來,在gamedev stack exchange上進行了一些非常富有成效的討論(也許這個問題也應該移到那裏)。首先看看this question,這是一個很好的起點,因爲它解釋了爲什麼ES設計中沒有明確的趨勢(當答案寫成時)以及我看到它今天仍然如此。然後,Byte56給出了一個absolutely amazing answer,它非常好地解釋了系統組件方法的基礎知識,即使您認爲您已經掌握了它,也值得閱讀。接下來,有一系列由Yannbane提問的有用問題。這些問題更詳細地解決了一些細節問題。這裏有allthreequestions。此外,還有一些關於如何整合inputGameStates的問題。

最後,你應該檢查出已經有很多的注意,如Artemis用Java編寫的一些開源實體系統(似乎是服務器的問題,現在該鏈接,但this article是一個很好的介紹,並有是c#c++存儲庫可用,所以你可以挖掘到一些代碼)。 AS3中還有ash

現在,我覺得我必須直接回答你的問題之一:

而且如果賺了CollisionComponent或瑪格組件中,瑪格及MoveComponent必須多溝通,對不對?

從您鏈接到您的圖似乎使用基於系統的方法(類似於artemis)。從我的閱讀中,我認爲這是社區普遍認同的一個領域:在系統方法中,這個想法是集中組件邏輯,以便(除了在Yannabe's second question的回答中提到的幾個簡單方法)組件僅僅是一個數據容器。因此,如果您的組件存儲在實體中,那麼您的系統需要篩選所有實體。需要多個組件的系統應詢問每個實體所需的所有組件以完成其工作。如果它不是找到所有這些組件,系統應該繼續前進。所以根據你迄今爲止的決定,答案是否定的,組件不應該與彼此溝通。

無論如何,祝你好運。