[Serie ECS Framework]--Un contacto íntimo con el quadtree (2)
Hola a todos, soy IT Man. El artículo anterior presentó la aplicación del marco ECS en H5. Este artículo hablará sobre el protagonista-quadtree.
Aún al principio:
Primero, veamos el efecto de la demostración y veamos el poder del quadtree cuando hay muchos objetos.
Rendimiento de generación del árbol cuádruple después de súper bloques múltiples
Finalmente, el efecto de desactivar las líneas de depuración
El árbol cuádruple es una estructura de datos, que es un tipo de estructura de datos para cada nodo Una estructura de datos con hasta cuatro subárboles. Los quadtrees se utilizan comúnmente para analizar y clasificar datos bidimensionales. Por lo tanto, es muy adecuado aplicar quadtrees para la detección eficiente de colisiones en dos dimensiones.
No enumeraré el código fuente de este método uno por uno, porque la implementación de quadtree no es el foco de este artículo. Solo presento el constructor de quadtree, los métodos que contiene y. La explicación sencilla del método. Hay muchas implementaciones de quadtree de código abierto en github. Si desea obtener más información sobre ellas, puede consultarlas usted mismo.
La clase Quadtree tiene los siguientes métodos miembro:
Cuando se genera una entidad de componente Canvas, captura la entidad para crear un quadtree con el nodo raíz rodeando la posición y el ancho del cuadro. nodo de lienzo. Luego, el objeto quadtree se guarda como un objeto ecs para que otros sistemas puedan acceder fácilmente a él.
A continuación, escriba un sistema "preocupado", que contiene tres componentes "Mob", "Apariencia" y "Prop" generados por entidades. Debido a que la entidad con estos tres componentes será reconocida como un monstruo, y el monstruo chocará con el protagonista, es necesario colocarlo en el árbol cuádruple para esperar la extracción.
Llame al método insert en la instancia quad para empaquetar el cuadro delimitador y la entidad del monstruo en un objeto y guardarlo en un nodo en el árbol quad.
Ahora que el monstruo está en el quad, necesitamos escribir un sistema de entrada del usuario para escuchar eventos, como que el jugador controle el movimiento del protagonista. Esto se hará utilizando la biblioteca hammer.js.
Define un sistema de entrada de usuario que se preocupa por los componentes "LocalControl", "Prop", "Node" y "Character". La entidad que contiene estos 4 componentes es nuestra entidad principal. Después de eso, escucharemos los eventos panstart (comenzar a tocar la pantalla), panmove (mueva el dedo) y panend (levante la mano).
Como puede ver, IT Man creó una entidad de componente "HighLight" en la devolución de llamada del evento "panmvoe" para decirle al motor (mundial) que necesito resaltar si hay un sistema que se preocupa por "HighLight". " ", entonces el sistema funcionará. El siguiente paso es definir un sistema que se centre en este componente.
La lógica de colisión no forma parte de la demostración. Los desarrolladores pueden manejarlo ellos mismos.
Finalmente, el monstruo desaparece y necesitamos actualizar el estado del nodo del árbol. Escriba un sistema de muerte que se centre en entidades con componentes "Mob", "Muertos", que se definen como entidades muertas.
Ahora podemos crear un árbol cuádruple, agregar objetos al árbol, verificar si hay colisiones con y contra el protagonista, eliminar nodos secundarios libres del árbol y más. Y así sucesivamente, creo que tiene una descripción general de cómo funciona el marco ECS con quadtrees para la detección de colisiones.
Si necesitas el código fuente, puedes contactarme a través de WeChat.
Si necesitas el código fuente, puedes contactarme en WeChat.
Gracias por mirar hasta el final (ps: Me gusta para apoyar)
[Serie ECS Framework] Combinación con Quadtree (1)
[Serie ECS 】 Herramientas esenciales en el marco
[Serie ECS] Ideas de diseño del mundo
[...Serie ECS] Ideas de diseño de entidades, componentes y sistemas
[ Serie ECS] Bienvenido al mundo ECS
Serie de enseñanza CocosCreator - Grupo de objetos
Máquina de escribir de texto enriquecido infinitamente anidada
Serie de enseñanza CocosCreator - Efecto de máquina de escribir (1 )
Serie didáctica CocosCreator: efecto de máquina de escribir (2)