ejemplo de plataformas básico usando tiles

Started by DCelso, January 29, 2010, 06:33:52 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Hola a todos, estoy buscando un ejemplo muy básico de un plataformas usando la técnica de baldosas, he intentado hacerlo de cero, pero tengo la mente tan "sucia" que siempre termino usando collision para una colisión perfecta de pixeles, usando métodos de anticipación de movimientos y cosas avanzadas que complican el entendimiento de la técnica de "tiles" a ver si alguien me echa una mano y me encuentra algo basiquísimo que reaprobechar. :D
Las premisas de las que se parte son las siguientes:
Un png que contiene muchos sprites o tiles de 8x8, en ellos están los tiles para crear el escenario, los sprites obstáculos, objetos, enemigos y personajes. extraer las imágenes para crear el fpg ya lo tengo hecho (creo que incluso tenemos varios ejemplos por el foro), no haría falta podríamos decir que tenemos un fpg con todos los sprites.
Un archivo de texto para crear el mapa de 32x32 tiles en el que línea a línea se va indicando qué tile del png anterior usar para crear el mapa.
Otro archivo de texto en el que se indican las posiciones de los obstáculos, objetos, enemigos y personajes que tendrá el mapa.

muy sencillo, sería algo como dibujar el mapa, poner los personajes, obstáculos y objetos en el mapa, mover al personaje y enemigos y realizar las colisiones a nivel de "tiles" (es decir no usar mapa de durezas, sino identificar el tile en el que estoy o estaré y actuar en consecuencia)

Esto es básicamente el inicio de programación de juegos para cualquier plataforma de recursos limitados y se hace en pocas líneas.

Intento rehacer el motor interno del manic miner que tengo para el APagame, lo he empezado varias veces de cero harto de ponerle parches pero el código que obtengo al final es verdaderamente un caos y no hay quien lo entienda, vamos, contrario a la filosofía que quiero darle a los juegos apagame ;D.

Gracias de antemano.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

Si por "pocas lineas" entendemos 2000, yo si tengo un ejemplo básico hecho para la detección de durezas, que sirve para un personaje de 1 tile de altura, y que funciona con un tileset de durezas de 22 tiles, entre las que se encuentran tiles huecos, sólidos, rampas, medias rampas, lo mismo pero transpasables de abajo a arriba pero no de arriba a abajo, chorros de aire ascendentes y escaleras (y está preparado para albergar otros 19 tiles iguales, pero en el agua).

No, en serio, parece fácil pero no lo es tanto, recuérdamelo al acabar el concurso y te paso el esquema que utilizo para ello.
La solución más sencilla es cargar el FPG con los tiles de durezas, y leer los pixels "a la antigua", como si fuera un mapa de durezas normal (rojo para el suelo, azul para las paredes...) sólo que primero debes saber qué mapa debes leer, y luego en qué posición de ese tile quieres obtener el pixel, no se si me explico.
Ahora, si usas pocos tiles de durezas, la cosa se simplifica muchísimo. Los problemas más gordos vienen por culpa de bajar rampas y de no caerse de los bordes hasta que has pasado completamente los tiles que tienes debajo.

Obviamente, el motor que tengo es un estandar, sirve para cualquier plataformas (y tengo otra versión para personajes de dos tiles de altura, pero traspasan ligeramente las paredes), y había pensado subirlo de manera que, con el motor de tiles, añadiendo un par de lineas, y llevando el control de la velocidad horizontal y vertical del personaje, se pueda hacer un plataformas con tiles, pero para eso hace falta tiempo que no tengo.

Un esquema rápido sería:
-Obtener las velocidades horizontal y vertical del personaje en base al estado actual y a las teclas pulsadas.
-Comprobar si se va a cambiar de tile y en qué dirección.
-Comprobar que se puede avanzar en esa dirección (el siguiente tile está libre, si subimos una rampa que no choquemos contra el techo...).
-En el nuevo tile, comprobar que estamos colocados correctamente (que no hayamos subido mucho y nos choquemos con el techo, que no atravesemos el suelo de una rampa, que no estemos demasiado pegados a la pared del tile contiguo...).
-Actuar según tiles especiales.
-Repetir.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

l1nk3rn3l

en el bennupack hay varios en seccion Ejemplos Medium y Ejemplos AVAnzados

gecko

Perdón por el reflote... pero me interesa de lo que estas hablando Drumpi!

Hay algo de codigo que se pueda ver? o algun ejemplo?

En tu motor de tiles utilizas durezas pixel por pixel o programas los comportamientos de acuerdo al tile? (por ejemplo si es una rampa mover en X lo mismo que en Y, y cosas de ese estilo, que vi que se hacen)

Lo pregunto aca mismo para no abrir un nuevo thread.
Torres Baldi Studio
http://torresbaldi.com

fulgorelizz

 ;) yo tengo una idea, pero a mi siempre me regañan xD jajajaja siempre splinter me arma bronca por lo que digo aca, jeje bueno yo estoy desarrollando un shoot them up , en 512x384 (ampliado a 1024*768) se ve super bien, a 60,1 en fps, y uso es un armador de escena, tengo una pentium 4, uso sector de 512* un alto fijo de nivel, en este caso archivos bmp 5120*900, todo en negro o color 0 para bennu lo que hace un archivo bastante liviano de referencias al scroll, genero algo llamado print_part que me imprime todas las partes del scroll como procesos cuyos ghrafico esta asignado en el mismo proceso y que sigue el siguiente comportamiento, si !out_region(id,0) entonces el graph=grafico_asignado de lo contrario graph=0; esto evita llenar de informacion por pixeles mi memoria, la dureza la evaluo asi como se evalua en dr malvado. mi archivo de dureza en este caso de 2560*450 con un color de dureza para limitar el movimiento del protagonista, tambien es bastante liviano, mi pc es un p4 de 2gb y video 512. corre tranquilazo, se ve muy bien. es una idea que manejo, es por cuestion de estetica que uno quiera hacer escenarios mas complejos tipo mega man x4 o contra 3, castlevania, me estoy ideando algo bien chulo, bueno esa es mi idea, ahora bien si quieres hacer algo tipo mario bros 1, los tiles te sientan super bien!! o un rpg tipo zelda supongo que tambien te iria de maravilla.
Compiling code -- generating exe...

gecko

Claro, lo que vos tenes es todo en un solo mapa, deberia funcionar bien.

Yo quiero saber como resolver el tema de las durezas pero en mapas de tiles...
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

Quote from: fulgorelizz on August 02, 2012, 09:17:47 PM
;) yo tengo una idea, pero a mi siempre me regañan xD jajajaja siempre splinter me arma bronca por lo que digo aca, jeje bueno yo estoy desarrollando un shoot them up , en 512x384 (ampliado a 1024*768) se ve super bien, a 60,1 en fps, y uso es un armador de escena, tengo una pentium 4, uso sector de 512* un alto fijo de nivel, en este caso archivos bmp 5120*900, todo en negro o color 0 para bennu lo que hace un archivo bastante liviano de referencias al scroll, genero algo llamado print_part que me imprime todas las partes del scroll como procesos cuyos ghrafico esta asignado en el mismo proceso y que sigue el siguiente comportamiento, si !out_region(id,0) entonces el graph=grafico_asignado de lo contrario graph=0; esto evita llenar de informacion por pixeles mi memoria, la dureza la evaluo asi como se evalua en dr malvado. mi archivo de dureza en este caso de 2560*450 con un color de dureza para limitar el movimiento del protagonista, tambien es bastante liviano, mi pc es un p4 de 2gb y video 512. corre tranquilazo, se ve muy bien. es una idea que manejo, es por cuestion de estetica que uno quiera hacer escenarios mas complejos tipo mega man x4 o contra 3, castlevania, me estoy ideando algo bien chulo, bueno esa es mi idea, ahora bien si quieres hacer algo tipo mario bros 1, los tiles te sientan super bien!! o un rpg tipo zelda supongo que tambien te iria de maravilla.

te pido perdon si consideraste que te he regañado, no era mi intencion, sino aportar una mejora (si es que cabe) a lo que se plantea, siempre para mejorar no para regañar...

te pido nuevamente disculpas por mis formas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: gecko on August 02, 2012, 10:07:49 PM
Claro, lo que vos tenes es todo en un solo mapa, deberia funcionar bien.

Yo quiero saber como resolver el tema de las durezas pero en mapas de tiles...

las durezas deberian ser tileadas tambien.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

gecko

Yo ahora mismo tengo una funcion que le paso las coordenadas x,y dentro del scroll y me devuelve la dureza del pixel que corresponde del tile que corresponde. Y con esto deberia pode hacer funcionar todo joya.

Ahora lo que vi que hay algunos que hacen es detectar el tipo de tile, y programar comportamientos especiales para esos tiles. Por ejemplo si es una rampa 45 grados, a medida que se avanza en X, tambien se va cambiando la coordenada Y. Pero todo a nivel programacion digamos, sin "mirar" los pixels del grafico, solamente sabiendo el tipo de tile. Se entiende? Creen que sea algo mas eficiente? mas simple?
Torres Baldi Studio
http://torresbaldi.com

fulgorelizz

Quote from: SplinterGU on August 02, 2012, 10:15:36 PM
Quote from: fulgorelizz on August 02, 2012, 09:17:47 PM
;) yo tengo una idea, pero a mi siempre me regañan xD jajajaja siempre splinter me arma bronca por lo que digo aca, jeje bueno yo estoy desarrollando un shoot them up , en 512x384 (ampliado a 1024*768) se ve super bien, a 60,1 en fps, y uso es un armador de escena, tengo una pentium 4, uso sector de 512* un alto fijo de nivel, en este caso archivos bmp 5120*900, todo en negro o color 0 para bennu lo que hace un archivo bastante liviano de referencias al scroll, genero algo llamado print_part que me imprime todas las partes del scroll como procesos cuyos ghrafico esta asignado en el mismo proceso y que sigue el siguiente comportamiento, si !out_region(id,0) entonces el graph=grafico_asignado de lo contrario graph=0; esto evita llenar de informacion por pixeles mi memoria, la dureza la evaluo asi como se evalua en dr malvado. mi archivo de dureza en este caso de 2560*450 con un color de dureza para limitar el movimiento del protagonista, tambien es bastante liviano, mi pc es un p4 de 2gb y video 512. corre tranquilazo, se ve muy bien. es una idea que manejo, es por cuestion de estetica que uno quiera hacer escenarios mas complejos tipo mega man x4 o contra 3, castlevania, me estoy ideando algo bien chulo, bueno esa es mi idea, ahora bien si quieres hacer algo tipo mario bros 1, los tiles te sientan super bien!! o un rpg tipo zelda supongo que tambien te iria de maravilla.

te pido perdon si consideraste que te he regañado, no era mi intencion, sino aportar una mejora (si es que cabe) a lo que se plantea, siempre para mejorar no para regañar...

te pido nuevamente disculpas por mis formas.

8) tranquilo splinter!! debo reconocer que de esto uds saben mas que yo, yo no le dedico al desarrollo de videojuegos tanto tiempo como me gustaria dedicarle, asi que mientras me las ingenio, y si consigo por aca pos aprendo ... jeje tranquilo!! aprender es bueno, estoy seguro que has enseñado mucho  ;D yo soy uno de los que ha aprendido de ti!!  ;)
Compiling code -- generating exe...

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2