Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Generarción De Mapas Tipo Worms

Iniciado por Loover, 28 de Enero de 2005, 07:59:22 PM

« anterior - próximo »

Loover

 Me gustaría saber si alguien ha leído por algún lado o se le ocurre la manera de generar mapas tipo Worms. Me refiero a partiendo de un simple mapa de bits con un contorno (o pongamos otro caso, a partir de un polígono convexo de muchas caras por ejemplo) generar todo el terreno, dibujando las formas como cesped, tierra, base, donde corresponda. No es algo trivial, o a mi no me lo parece.

Gracias!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

nsL

 Una vez postearon por estos lares algo parecido, y hablaron de algo de mapas de booleanos creo recordar, aunq no estoy muy seguro...
De todas formas busque el post y no lo encontre, aunq seguro q alguien viene y te resuelve la duda.

Saludos!  B)  
Yo no muero hasta la muerte -

Loover

 Gracias, lo he encontrado http://www.stratos-ad.com/forums/index.php...60&hl=booleanos poniendo "booleanos" en el buscador del foro. Voy a leer.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Loover

 Pues no me ha servido de mucho la verdad. En ese post se discutían como generar el bmp aleatoriamente, esa silueta. Eso es trivial, dentro de lo que cabe. Lo que yo quiero es, partiendo de esa silueta, generar un terreno tipo Worms.

En realidad no partiría de una silueta de mapa de bits, sino de un polígono regular cóncavo (con posiblidad de entrantes y salientes, me refiero). Dicho poligono regular tendría sus píxeles ordenados "en el orden de las manecillas de un reloj", es decir, no sería una "sopa" o "bolsa" de píxeles.

De forma que así de buenas a primeras, para averiguar que terrenos serían cuestas y si quedarían hacia arriba o hacia abajo, podría ir sacando los vectores normales al plano. Luego entre cada uno de los vértices, y siguiendo la dirección del vector perperdicular al vector normal, ir colocando "hebras" de cesped sobre un mapa de bits. Y luego por supuesto transformar dicho mapa de bits en una textura.

Viendo los mapas del worms2, acojona el nivel de cosas que tienen en cuenta y el acabado "a mano" que se consigue. El problema principal son los contornos, porque el interior es una mera textura repetida.

Bueno, se me ocurren aproximaciones de esa guisa.

¿Ningún "paper" circulando por ahí con más información?

Un saludo!





IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Pogacha

 Edit: estoy reeditando haber si termino en menos de 1/2 hora. Maldito tab!

Para la tierra es facil tienes una textura grande la cual se blendea con el borde, el problema es el cesped y el bajo tierra (cuando debajo de un bloque de tierra hay aire).

Esta es mi solucion:
Algoritmo Pogacha-Generador de pasto y bajo tierra.

bool MapaBooleano[MAX_Y][MAX_X]; // suponiendo que esta con el mapa

bool MascaraDePasto[MAX_Y][MAX_X]; // suponiendo que esta toda a false

 for(j=0; j<MAX_Y; j++)
   for(i=0; i<MAX_X; i++)
      if(MapaBooleano[j][i] && !MapaBooleano[j-1][i])  MascaraDePasto[j][i]=true;

// con lo anterior tenemos una mascara de pasto delgada

De la misma forma se crea un bajo tierra

Y despues para pintarlo adecuadamente con pasto crecido

Color TexturaPasto[AltoPasto][MAX_X];

Color Pantalla[MAX_Y][MAX_X];

for(j=0; j<MAX_Y; j++)
 for(i=0; i<MAX_X; i++)
    if(MascaraDePasto[j][i] && !MascaraDePasto[j-1][i])
    {
        for(k=0; k< AltoPasto * 2; k++) if(!MapaBooleano[j+k][i]) break;
        for(h=0; h< k; h++) Panatalla[j+k][i]=TexturaPasto[AltoPasto-k-1][i];
                       // o TexturaBajoTierra[k][i] pues empieza de arriba hacia abajo
    }

Espero haber dado al clavo  ;)

Obviamente estos dos, alto de pasto y alto de bajo tierra, deben ser tenidos en cuenta a la hora de poner la textura de la tierra.

Saludos

Loover

 Perdon, he visto un error en mi post y es demasiado tarde para editar. Cuando digo "píxeles ordenados" quería decir "vértices ordenados" ;)
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Loover

 Ya veo pogacha, examinar píxeles encima de los cuales haya cielo y crear de esta guisa un máscara para el cesped que aplicar más tarde. Y luego sería plan de hacer lo mismo pero en dirección contraria para lo bordes de abajo. Bueno, es una idea. Gracias :)

Tendria algunos problemas. Cuando dices "fina"... y tan fina. Es de un pixel. Si la quisiera hacer de más con ese método directamente habría problemas. Imaina que me salgo del borde dibujando hacia abajo en un saliente el cesped. Pero bueno, como base, la idea es buena.

Más! quiero más opiniones :D

EDIT:
Arg! Que has editado tu también... a ver, sino entiendo mal el cesped, creo que lo dibujas"hacia arriba" por lo que se evita el error que he dicho de que se salga. De todos modos no me sirve hacia arriba, porque tendré presente el polígono para colisiones, por lo que necesito colisiones con el borde mismo. Aunque siempre se podría hacer un apaño, claro. Hice mal en decir que partía de una silueta de mapa de bits. Parto de un polígono cóncavo. Bueno, habría que pulir la idea pero como base puede servir.

Por ejemplo, dibujar hacia abajo, y luego aplicar al conjunto de la silueta una máscara para borrar los sobrantes. ¡Me gusta eso!

De todos modos, ¿te importaría explicar más y colocar menos código? Prefiero conceptos a código, gracias!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Pogacha

 Lo unico que veo de incorrecto es que no controla los bordes pero se supone que esos detalles debes darselos tu ;).

Tengo la mala costumbre de apretar tab cuando estoy escribiendo codigo y automaticamente salta a Responder y si aprieto espacio me responde solo.

Saludos

Loover

 Incluso se podría mirar también los píxeles adyacentes y mirar de esa forma cuan abrupto es el terreno. Si te fijas en el worms cuando las cuestas son muy pronunciadas coloca menos tierra de la de los bordes que están hacia abajo.

Sí me mola esta idea de hacerlo con máscaras y tal. Más lenta que usando vectores pero quedará mejor.

Gracias de nuevo.  
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Pogacha

 La idea esta.
Primero hago una mascara donde digo en esta poscion hay aire y abajo pasto.
Despues digo cuanta tierra hay debajo de este lugar donde se cumple lo de arriba lo guardo en la variable k con tope Alto del Pasto * 2.
Dibujo pasto hacia abajo, pero empezando de la parte de arriba del pasto, el ancho de esta franja vertical de pasto lo dara k/2, de esta manera tendre en el caso que halla mucha tierra el tope del alto de pasto y sino el tope sera la mitad del alto de la franja de tierra, por que la mitad, para permitir el bajo tierra viniendo desde abajo.
En realidad se puede hacer sin la mascara.

Por cada punto de la pantalla:
  Si hay tierra en este punto y en el punto de arriba hay aire
  {
      Cuento cuanta tierra hay hacia abajo.
      Dibujo pasto desde el punto acual hacia abajo, la altura es la mitad del alto de la franja vertical de tierra o el tope de alto del pasto segun cual sea menor.
  }

Pogacha

 En realidad el alto de la franja es la misma, es un efecto de la inclinacion lo cual hace que parezca menos por ser mas delgada.

Loover

 Sí? Pues menos trabajo. Va a ser muy divertido programar esto.

Más que máscara de cesped, lo que haré será empezar por el borde de arriba a abajo y dibujar píxeles sacados de un mapa de bits pequeñito con el dibujo del cesped. Para que se quede bien dibujado. Iré avanzando de izquierda a derecha ese bmp, y dibujando "tiras" hacia abajo :)


EDIT:
Arg!!! Te adelantaste otra vez! Y encima yo no había tenido en cuenta lo de la mitad del borde ;) que es mejor que aplicar al final una máscara para eliminar sobrante y encima permite que en ese punto haya tierra de la de abajo.

Muchas gracias Pogacha! En vez de cerebro parece que tienes una cpu! :D
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Pogacha

 
En este dibujo se ven claros como el pasto se dibuja desde arriba hacia abajo, hasta la mitad de la franja de tierra o hasta el tope ( en este caso 3 pixels ).
Saludos

Loover

 I love you. Lo completaré con una textura tanto de cesped como de tierra hacia abajo no de un pixel de ancho, sino de varios más. Va a quedar de lujo.  (uoh)

Por cierto esto no parecía un foro, parecía un chat :D
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Pogacha

 Ya estas obligado moralmente a mostrarlo en el foro!
Suerte!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.