Querying Components
Aprende cómo obtener listas de entities que tienen components en común, para facilitar su comprobación o actualización.
Puedes consultar components con el método engine.getEntitiesWith(...components) para llevar un seguimiento de todas las entities en la scene que tengan ciertos components.
Systems normalmente iteran sobre las entities en estas queries, realizando las mismas operations en cada una. Tener un grupo predefinido de valid entities es una excelente manera de ahorrar resources, especialmente para funciones que se ejecutan en cada tick del game loop. Si en cada tick tu system tuviera que iterar sobre cada entity en la scene buscando las que necesita, sería muy ineficiente.
Puedes acceder a las entities en una query de la siguiente manera.
for (const [entity] of engine.getEntitiesWith(Transform)) {
//...
}Components requeridos
Al hacer una query, especifica qué components deben estar presentes en cada entity que se añada al group. Puedes listar tantos components como quieras; la query solo devolverá entities que tengan todo de los components listados.
for (const [entity] of engine.getEntitiesWith(
Transform,
Physics,
NextPosition
)) {
//...
}Usar queries en un System
En el ejemplo anterior, la PhysicsSystem función itera sobre las entities de la query, y se ejecuta en cada tick del game loop.
Si la scene tiene varias ball entities, cada una con un
Transformy unPhysicscomponent, entonces se procesarán, y su posición se actualizará en cada tick.Si tu scene también tiene otras entities, por ejemplo una hoop y un scoreBoard que solo tienen un
Transformpero no unPhysicscomponent, entonces no se verán afectadas porPhysicsSystem.
Trabajar con las entities y components
El getEntitiesWith function devuelve una collection que incluye references a un conjunto de entities y también puede incluir opcionalmente references a los components listados.
Usando la sintaxis más simple, obtienes solo una lista de references a las entities correspondientes.
Mientras iteras sobre esta lista de entities, puedes obtener versiones de solo lectura o mutables de sus components, usando .get o getMutable.
Opcionalmente también puedes obtener references a cada uno de los components listados directamente como parte de la collection devuelta por la query. Para ello, solo declara múltiples references juntas, una para cada component que quieras obtener. Añadir estas references es opcional, y no necesitas declarar references a todo los components en la query tampoco.
📔 Nota: Estas references son de solo lectura. Para obtener versiones mutables de esos components, necesitas usar la .getMutable function que hace referencia a la entity.
Luego puedes referirte a estas references mientras iteras sobre la collection de resultados; en cada entrada tendrás acceso a la entity y a sus correspondientes component references.
Suscribirse a los cambios
Un caso de uso común es ejecutar una function solo en caso de que los datos de cierto component cambien. Usa la OnChange function para evitar tener que definir un System y tener que comparar explícitamente los valores antiguos con los nuevos.
Última actualización