2015-04-03 58 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