¿Me arrepentiré de usar un sistema de detección de colisión basado en el color?


7

Recién estoy comenzando a construir mi primer juego con XNA (tengo experiencia con C # pero no con juegos).

Estoy construyendo un juego de disparos 2D de arriba hacia abajo bastante simple. Leí este tutorial sobre el uso de un sistema de colisión basado en el color y me pareció genial. http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

Significa que puedo hacer niveles rápidamente usando cualquier programa de gráficos y no tener que definir mi escenario (paredes, árboles, etc.) en términos de cajas de colisión, etc.

Sin embargo, puedo ver que seguir este camino significa que tal vez el cálculo para determinar si los objetos que se mueven rápidamente, como las balas, se cruzan con las paredes, etc., se vuelve potencialmente más difícil porque no puede hacer cálculos de tipo de intersección de geometría básica.

¿Está bien? ¿Me arrepentiré de ir en esta dirección si mi juego se vuelve más complejo con el tiempo? ¿Vale la pena invertir en la creación de un editor de niveles para definir mi escenario en términos de geometría?

Cualquier consejo para un novato muy apreciado!

Respuestas:


6

Estás acertado con tus observaciones sobre las capacidades de un enfoque de colisión basado en mapa de bits.

Este método proporciona una manera realmente fácil de editar sus niveles con cualquier programa que pueda generar un mapa de bits (cualquier programa de edición de imágenes). Este sistema también es realmente flexible cuando desea definir diferentes tipos de terreno. Digamos greenpor lodo y redpor un subsuelo sólido. Luego puede consultar fácilmente el píxel actual y determinar el tipo de subterráneo en el que se encuentra el jugador. Incluso las rampas (gradientes del tipo de suelo A a B) son posibles sin muchos problemas.

Surgen problemas con la detección de colisiones. Es fácil detectar una intersección con otro objeto (solo haga una prueba de píxeles), pero es difícil (computacionalmente costoso) descubrir qué orientación tiene el objeto con el que colisionó. Esto es especialmente importante cuando necesita una superficie normal para desviar los objetos correctamente .

También los objetos que se mueven muy rápido pueden ser un problema, especialmente si tiene objetos delgados (por ejemplo, de 1 píxel de ancho) para colisionar. Hay una pregunta que ya cubre este tema.

Al final, todo depende del tipo de juego que quieras crear y qué resolución (en términos de detección / resolución de colisión) necesites. El enfoque basado en mapas de bits funciona mejor cuando una gran parte de su mundo es estático. Pero también le permite implementar cosas como niveles destructibles con bastante facilidad.

Como no mencionó el tipo de juego que desea crear, ahora depende de usted decidir si un enfoque de colisión basado en un mapa de bits sería beneficioso para su juego. Buena suerte.


En mi experiencia, el problema normal de la superficie es bastante trivial en comparación con la determinación real del impulso angular después de un impacto, en un sistema de detección de colisión con píxeles perfectos. En general, PPCD no se usa para juegos que requieren ese tipo de nivel de detalle, sin embargo, probablemente porque hace las cosas mucho más difíciles que la física basada en vectores, en este sentido. El otro problema que experimenté con este enfoque fue la posibilidad de quedar "atascado" cuando gira su personaje en ciertas posiciones de su nivel. Box2D y similares manejan esto al separar los centroides cuando están demasiado cerca.
Ingeniero

¡muchas gracias! No planeo hacer ninguna desviación, así que creo que está bien. No estaba seguro de qué hacer con las balas que viajan rápido y que pueden saltar paredes en un solo marco. Averiguar si cruzaron una pared parece estar bien, solo tome una muestra de la imagen del mapa en un rectángulo largo y delgado que es el camino de las balas y busque píxeles de colores en la pared. Pero descubrir el primer píxel de la pared que habría golpeado parece un poco más difícil. Creo que cuando la bala se dispara por primera vez, emitiría rayos y tomaría una serie de píxeles de muestra a intervalos cortos a lo largo del rayo buscando el primer píxel de pared y lo marcaría como el punto de impacto.
TerryB

2
@TerryB: Creo que el algoritmo de línea de Bresenham funcionará bien aquí. Dibuja la línea hasta que golpees un píxel de la pared y ese será tu punto de colisión.
bummzack
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.