Encontrar fichas desocupadas en un juego basado en fichas

9

Estoy trabajando en un juego basado en mosaicos 2D, y en este momento estoy tratando de hacer que funcione un equivalente en 2D de los volúmenes de sombra. Tengo problemas para encontrar las superficies que deberían proyectar sombras. Desde cualquier punto del juego, necesito encontrar las caras desocupadas o todo el mosaico.

Mi pregunta es, ¿cómo puedo encontrar estos mosaicos / bordes lo más rápido posible dado un punto?

Imagen que muestra la línea de visión general y las fichas afectadas

Ryan S
fuente

Respuestas:

2

Esta no es una respuesta completa, pero espero que ayude.

¿Su mapa / mosaico está configurado como estático o dinámico? Si es estático, lo haría recomiendo encarecidamente que realice el procesamiento fuera de línea y precalcule todo lo que pueda de esa manera. Puede hacerlo de la forma que desee (emisión de rayos o algo más inteligente), pero realmente no le importa hacerlo muy rápido porque todo sucederá sin conexión mientras "hornea" sus niveles. Puede precalcular exactamente qué mosaicos son visibles desde cada punto, o crear algún tipo de regiones más grandes y todos los mosaicos potencialmente visibles desde cada región.

Luego, en tiempo de ejecución, la consulta de los mosaicos visibles debe ser muy sencilla y muy rápida.

Por supuesto, si tiene niveles creados dinámicamente, esto no se aplica en absoluto :-)

Noel Llopis
fuente
1

Puedes ver cómo implementé esto para un C # roguelike aquí . El código no está muy optimizado, pero parece ser lo suficientemente rápido para mí y (más importante) debería ser bastante fácil de leer. Básicamente está haciendo un algoritmo simple de proyección de sombras que funciona un octavo a la vez.

munificente
fuente
0

No estoy seguro de en qué plataforma se encuentra, pero realmente no puedo pensar en ninguna plataforma que no sea lo suficientemente rápida como para hacer crecer un círculo alrededor de sus entidades de transmisión de luz (a menos que haya muchas em) y detectar si El mosaico a punto de ser "trazado" en su algoritmo de círculo es un mosaico sólido y, por lo tanto, bloqueador de luz. A partir de ahí, sería un poco más complicado, ya que tendría que realizar un seguimiento de los segmentos del círculo que están ocluidos o no, pero sería lo que haría. Otra opción sería lanzar rayos en un círculo (de nuevo bastante rápido) en el espacio de resolución de mosaico y detener cada rayo cuando golpea un mosaico sólido.

Kaj
fuente
Bueno, principalmente hago juegos Flash y Javascript, pero actualmente, hago una especie de método de fuerza bruta que comienza a empantanarse después de un tiempo. Me imagino que si puedo descubrir cómo optimizarlo, puedo hacer que este juego funcione bastante bien.
Ryan S
Debería ser fácilmente factible en flash, tal vez tu fuerza bruta podría optimizarse. Además, en general, no tiene que actualizarlo cada fotograma, por lo que podría calcular previamente la siguiente situación en un par de fotogramas
Kaj el