Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Componer bordes de un rio (tiles)

Iniciado por KarlsBerg, 20 de Abril de 2007, 06:55:16 PM

« anterior - próximo »

KarlsBerg

Hola, tengo poca experiencia en el desarollo de videojuegos y me gusta informarme antes de hacer cada cosa que tenga alguna duda, por ello queria informarme sobre los algoritmos que se suelen usar para componer las orillas de un rio, en mi mapa de tiles

No se si he hecho bien en generar un mapa aleatorio en una surface SDL de NxN donde N es igual al numero de tiles del mapa, de forma que cada pixel simboliza un tile. bien... pinto toda la surface de un verde, y genero un flujo de rio en color azul, bien, luego entrego esta surface a mi libreria isometrica de tiles, con un diccionario de colores con este formato:  (R,G,B):SDLSurfaceDelTile Asi que cada color es un tipo de tile y esta clase ya me genera un array interno de objetos Tile. bien, el tema es que ahora una vez tengo el rio debo pintar con X color (X seria un color por cada tipo de tile orilla) para asi componer todo el orillado y darle estos colores con su tile a la libreria isometrica para que genere tb orillas..

Bien, el tema principal del post es ¿Como debo componer el orillado?. los rios salen horizontal y verticalmente por esa surface que suele ser de unos 80x80 pixeles, mas o menos se que debo hacer un bucle y recorrer cada x,y de la surface y supongo que mirar los pixeles adjuntos y consultar su color, pero a la hora de ponerme a hacerlo vi que era muy relativo y amplio, y quizas yo no este en lo correcto.

Alguien podria mostrarme/explicarme o ilustrarme el procedimiento?

Adjunto una imagen del rio sin orillas y otra de las orillas.
(el rio en ocasiones tambien me genera un pixel que entra y sale solamente, debo eliminar esto?)

http://img256.imageshack.us/img256/6272/riosus5.jpg
http://img84.imageshack.us/img84/1897/orillasbr4.png

marcode

Se me ocurre que primero hagas los exteriores, comprobando todos los de tierra que estén en contacto con los de agua. Y después añadir los interiores enlazando los tiles modificados.

Igual no me expliqué bien.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

KarlsBerg

Cita de: "marcode"Se me ocurre que primero hagas los exteriores, comprobando todos los de tierra que estén en contacto con los de agua. Y después añadir los interiores enlazando los tiles modificados.

Igual no me expliqué bien.

mmm, no no capte el tema.

Generar primero las orillas de ambos lados y rellenar con azul? :-/

marcode

Ya, si es que es jodido de explicar, tampoco estaba yo muy seguro, he hecho un copy de lo que has puesto en un trozo de rio para ver cómo sería, y creo que debe resultar.

Los exteriores me refiero a los que tienen más agua que tierra, de los dos grupos de tiles que has puesto en la imagen.

Entonces (1ª imagen) se comprueban todos los de tierra y dependiendo de las zonas que tenga de agua se elige uno u otro exterior.

Después (2ª imagen), se "une" con un interior a los exteriores dependiendo de la disposición de estos.

size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

KarlsBerg

Aja... no parece mala idea.. muchas gracias por contestar tan rapido.
Me quedo atento a otras respuestas antes de meterle mano

Un saludo y happy hacking

yens

A ver si sigue avanzando a buen ritmo eso eh! Pero quitate imagenes de las firmas que no se pueden xD

KarlsBerg

Ouch Ouch ! que voy a salir baneado antes del mensaje numero 10...

t-spy

Hay una forma simple de hacer lo que quieres. Para cada tile de agua que tengas se obtiene un valor único dependiente de los tiles de tierra que le rodean. Para ello se hace lo siguiente:

- Valor inicial: 0
- Si hay tierra por arriba se suma 1.
- Si hay tierra por la derecha se suma 2.
- Si hay tierra por abajo se suma 4.
- Si hay tierra por la izquierda se suma 8.

El resultado es un número de 0 a 15, donde el 0 sería un tile completamente rodeado de agua y el 15 completamente rodeado de tierra. Ahora solo tienes que colocar en esa posición el tile que corresponda al valor obtenido.

Tendrás que crear 16 tiles, aunque ya los tenías que crear antes si querías cubrir todas las posibilidades.


Creo que me he explicado. Si tienes alguna duda solo tienes que preguntar.

KarlsBerg

Pues ya lo tenia hecho cuando posteaste, quizas he hecho la mayor cagada de mi vida, pero he hecho unos ifs aplicando unas reglas

Si AGUA en izquierda, agua en derecha y tal bla bla pon este tile:!

:roll:

StraT

Yo haría como te han dicho abajo:

1) Eliges comprobar los de agua o los de tierra.
 -Si eliges los de tierra, has de mirar para cada uno si alguno de los colindantes es agua. Si lo es, cambias ese de tierra por un tile que "pegue". Pero ojo que puede ser que varios de los colindantes sean agua y tendrás que actuar en consecuencia. En este caso "pierdes" tierra porque estás substituyendo algunos bloques de tierra por bloques de agua y tierra.
 -Si eliges agua, comprueba en los colindantes si hay tierra y haces lo mismo. En este caso "pierdes" agua.

Yo personalmente elegiría agua porque suele ser más "utilizable" el agua que la tierra en los juegos, pero eso es decisión tuya.

Espero que te sirva, saludos!
quot;Solo hay dos cosas infinitas, el universo y la estupidez humana, aunque de lo primero no estoy muy seguro\\\" Einstein






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.