c# xna terrain

c# - ¿Cómo implementar un terreno destructible de estilo Worms en XNA?



terrain (4)

Aquí hay dos ejemplos que se basan en cómo hacer esto con los sombreadores de píxeles en XNA 4. Ambos ejemplos incluyen el código fuente.

http://www.syntaxwarriors.com/2012/xna-alpha-mapping-with-pixel-shaders/

http://www.syntaxwarriors.com/2012/xna-alpha-mapping-with-pixel-shader-and-rendertarget2d/

Hacer esto con los sombreadores de píxeles es muy rápido ya que todo el trabajo pesado se realiza en el gpu.

Quiero hacer un prototipo de una idea para un juego que tengo. La idea para este juego es que el jugador cavará a través del suelo, creando túneles y encontrando tesoros.

Estoy buscando crear un terreno con ''estilo de gusanos'', con detección de colisiones para el jugador que vaga y salta por los túneles. Ejemplos de este tipo de terreno dinámico se pueden ver en estas imágenes. Ejemplo 1 http://img301.imageshack.us/img301/1675/30184730wd6.png

Mi pregunta es ¿cómo es la mejor manera de implementar este tipo de terreno destructible? Estoy usando el estudio de juegos XNA.


Hay dos posibilidades, pero una de ellas funciona, pero depende de XNA lo fácil que sea de implementar:

  • Como otros sugirieron, enmascaramiento de mapa de bits. Mantienes un mapa de bits de todos los píxeles "de fondo" y todos los píxeles de "aire". Si tienes gravedad; un personaje no puede caer por el suelo, mientras que puede caer por el aire.
  • Geometría del vector. Se comienza con un "suelo" rectangular y se mantiene una lista de "tierra removida", que crea aire. Esta geometría es muy sencilla de editar: solo agregue un círculo o similar a la lista y actualice los gráficos. No sé si XNA tiene habilidades vectoriales y de forma; pero debería ser fácil crear geometría con estas dos cosas, y luego aplicar una textura o similar. Además, esto puede ser fácil de optimizar, al mantener una versión en caché del paisaje renderizado, y solo actualizar el caché del cuadro delimitador del "aire" recién agregado. Sin embargo, esta solución requiere un poco más de matemáticas.

Hay un buen código en la parte inferior de este hilo . Además, this es un excelente tutorial paso a paso para lograr un terreno destructible.

EDITAR - El enlace original para el segundo tutorial se rompió, así que lo he vinculado a una versión archivada.


Riemer tiene un enfoque similar al de un juego que desarrolló en XNA, los proyectiles de cañón provocan que el terreno se "destruya" y los objetos que se encontraban anteriormente en dicho terreno se mueven en consecuencia.

Necesita ser refaccionado y mejorado para sus necesidades, pero es un comienzo.

Riemer tiene una buena selección de tutoriales para otras cosas también.

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Adding_craters.php