2015-04-03 38 views
0

In EntityX EntityManager有一個方法entities_with_components返回所有具有所需組件的實體。在Emitting EventsEntityX框架entities_with_components性能

的例子,我看到那個方法的雙重用途:

for (Entity left_entity : es.entities_with_components(left_position)) { 
    for (Entity right_entity : es.entities_with_components(right_position)) { 

是它的性能有效或將查詢找到合適的實體兩次?

回答

2

我寫了Entityx。

是的,這將迭代實體N^2次。你不想在真實的代碼中做到這一點。 EntityX附帶的示例有much better collision system,性能非常好。但是,再次,在真實的代碼中,如果你使用物理系統,它可能會爲你做碰撞,或者你可能使用專用的碰撞庫。

亞歷克

+0

謝謝亞歷克。我的問題不是關於迭代,而是關於如何知道具有適當組件的實體是什麼。我問詢問。每次我調用'entities_with_components'時,每個系統都有一個實體的靜態列表,框架尋找這樣的實體。 – Narek 2015-04-03 12:31:35

+0

啊。這是不明確的。每個組件都存儲在一個向量中。每個實體只是組件向量的索引,以及指定實體分配了哪些組件的位掩碼。 – 2015-04-03 23:04:22

+0

亞歷克,仍然沒有回答我的問題。 'entities_with_components'方法如何選擇實體?它是否找到位置組件的向量,並且每個組件都查看它映射到的實體。而且在每個調用中它都一樣嗎?例如,在Artemis中,每個系統都有一個成員變量,用於存儲其活動實體,並且每次都不進行查找。它只是調用'processEntites'並將'active'實體傳遞給該方法,這比查找每個實體都要高效。 – Narek 2015-04-04 05:40:53