Al crear un nivel en kaboomJS con colisiones de mapas de mosaicos grandes, las cosas comienzan a ponerse lentas... Entonces, me preguntaba si había una manera fácil de fusionar múltiples mosaicos, como si una fila completa de bloques pudiera tratarse como un bloque grande.
Si desea reducir la cantidad de objetos de juego en la escena a la vez, puede tener un solo símbolo en su definición de nivel que represente un objeto de juego que abarque múltiples mosaicos de cuadrícula. Entonces, si desea muchas plataformas que tengan 3 cuadrados de cuadrícula de ancho, no necesita 3 objetos por plataforma, puede usar un solo carácter para representar un rectángulo de 3x1:
import kaboom from "kaboom" // initialize context kaboom() // load assets loadSprite("bean", "sprites/bean.png") addLevel( // Note: the hyphens here hare just place holders to remind us that the // game objects created by ➁ and ➂ are actually taking up 2 and 3 grid // squares respectively. [ " ⚥ ", " ", " ➂-- ", " ", " ➁- ", " ", " ", "################################", ], { width: 32, height: 32, "⚥": () => [ sprite("bean"), area(), body(), "player" ], "#": () => [ rect(32, 32), outline(2), area(), solid(), ], "➁": () => [ rect(32 * 2, 32), outline(2), area(), solid(), ], "➂": () => [ rect(32 * 3, 32), outline(2), area(), solid(), ], } ); const player = get("player")[0]; player.onUpdate(() => { const left = isKeyDown('left') || isKeyDown('a'); const right = isKeyDown('right') || isKeyDown('d'); if (left && !right) { player.move(-500, 0); } else if (right && !left) { player.move(500, 0); } camPos(player.pos); }); onKeyPress("space", () => { if (player.isGrounded()) { player.jump(); } });Obviamente, si tuviera muchas formas y tamaños diferentes, esto sería bastante oneroso.
De hecho, me encontré con este problema yo mismo en un proyecto reciente de Kaboom y decidí revisar por completo el addLevel() con mi propia implementación que se cargó desde un mapa de bits en lugar de un montón de cadenas, y luego organicé los datos de nivel en un quadtree para que Rápidamente pude encontrar fragmentos que se superponían al área visible y cargar y descargar objetos del juego en función de su visibilidad. La técnica y el código son un poco complejos para incluirlos aquí, por lo que solo vincularé el Repl y el código fuente relevante: level-loader.ts y lib-quad-tree.ts y el uso en level-one.js .