Ayuda con paredes/bloques en RPG

Started by HenBanKeN, June 09, 2011, 10:33:20 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

HenBanKeN

Hola, quizás esta duda sea muy de novato.

Y de hecho, llevo solo dos noches (hasta las 6 AM xD) conociendo BennuGB, pero el saber algo de C me ha ayudado mucho a avanzar bastante rápido.

Bien, he logrado hacer un personaje que se mueva en 4 direcciones en el vacío.
La cosa es que como este juego tendrá una vista desde arriba a lo RPG, obviamente que habrán paredes y objetos con los que mi personaje pueda chocar.

He estado viendo sobre collision pero no sé si me sirva para este caso en particular.
Digo, en realidad lo que quiero es que mi personaje NO pueda colisionar con algunos otros procesos.

Se me han ocurrido varias formas, pero todas requieren una buena porción de código, y me preguntaba si hay una manera "rápida", ahorrativa respecto a recursos, o al menos "conocida" para lograr esto.

He buscado ayuda pero no he encontrado ninguna información que me "ilumine la ampolleta".

Será que en estos días me freí el cerebro? xD

Sea como sea, muchas gracias de antemano. Estaré esperando sus ideas para ver qué puedo hacer, o qué funciones me serían útiles para construir el asuntillo.

Saludos!
Aún aprendiendo a manejar mis herramientas...

Yawin

Es más sencillo de lo que piensas. imaginate que tienes este código en tu personaje:
if(key(_up))
    y--;
end


Pues, para evitar que atraviese al proceso "perro" (por ejemplo). Puedes poner lo siguiente:
if(key(_up))
    if(!collision(type perro))
        y--;
    end
end


Así, sólo harás "y--" si no estás en contacto con un proceso "perro". En este caso, la colisión se realizará en los bordes, asi que el ojo humano no percibe que estén más que rozándose.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

KeoH

si lo q quieres es q no cruce paredes y cosas de esas, lo mas sencillo es usar los mapas de durezas, en el manual de Osk viene bien descrito :)

SplinterGU

quizas te convenga usar un mapa de durezas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

+1 durezas, explicado excelentemente en el manual de Osk.
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

HenBanKeN

Pero qué respuestas más rápidas, gracias a todos! xD

Yawin, la verdad es que fue muy estúpido no haber pensado en eso ._. estaba complicándome con cosas más enredadas.

Y a los demás, muchas gracias =o justamente en el Manual que dicen, voy en el tema anterior al de Durezas... joder eso me pasa por querer meter las manos en la masa de inmediato xD jeje.

Si vuelvo a tener algun problema, les aviso.

De todas formas, aprovecho para preguntar por un "problema" que he tenido intentando crear juegos en experiencias anteriores.

Imaginemos que tengo una serie de pasillos de una ancho similar al del personaje. He tenido problemas para que el personaje "doble" entre un pasillo y otro, pues a la mínima colisión el movimiento se para de inmediato.

xD si este asunto está cubierto por el tema de Durezas, ignoradme xD ahora mismo voy a comer algo y a seguir con este asuntillo :3 gracias!
Aún aprendiendo a manejar mis herramientas...

SplinterGU

si la dureza esta bien hecha no vas a tener ese problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

HenBanKeN

Ya estoy probando varias formas de hacer este mapa de durezas. Me estoy calentando la cabeza para ver como hacerlo para "redondear" el movimiento en las puntas. Es decir, que el juego ponga alineado al personaje cuando éste quiere doblar una esquina.

Muchas gracias por la ayuda! :3
Aún aprendiendo a manejar mis herramientas...

SplinterGU

los mapas de durezas para caminos no deben seguir el contorno de los graficos, sino que tienen que ser rectos, asi no te quedas pegado a ningun lado.

estaba buscando un ejemplo, pero no lo encuentro.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

Quote from: HenBanKeN on June 10, 2011, 06:51:36 AM
Ya estoy probando varias formas de hacer este mapa de durezas. Me estoy calentando la cabeza para ver como hacerlo para "redondear" el movimiento en las puntas. Es decir, que el juego ponga alineado al personaje cuando éste quiere doblar una esquina.

Muchas gracias por la ayuda! :3

Si yo quisiera hacer un comecocos, identificaría las bifurcaciones por ejemplo con otro color en el mapa de durezas, para operar adecuadamente en el momento en el que se esté en ese cuadro. De esa manera simplificas bastante el problema de los giros.

Saludos!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

un comecocos es muchisimo mas simple, no se necesita hacer un mapa de durezas de diferentes colores.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

Cierto, Splinter. Pero como ejemplo simplificado,creo que se entiende la idea de usar más colores en las durezas...
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

HenBanKeN

#12
Muchas gracias por las ideas =O

usando map_get_pixel de forma ingeniosa logré hacer un movimiento redondeado al doblar y quedó de perlas.

Muchas gracias a todos.

Ahora, sobre este mismo tema de bloques con mapas de durezas...
Algunos de los bloques que necesito hacer (solo algunos), son destructibles y aparecen en lugares al azar.
He pensado cómo usar un mapa de dureza para esto, pero no me parece posible. Lo es?
De hecho la alternativa de map_get_pixel creo que no me servirá para esos bloques.

Por lo que he leído sobre collision en estos días desde que llegué al foro, me gustaría mucho evitar esa alternativa... jaja.

Tenéis alguna idea? :3

Saludos!

EDIT: Por cierto, se me olvidaba decir que una de las razones por las que no quería usar collision es porque mi juego está visto desde arriba (como er pokémon), y el personaje es alto entonces su parte superior debería poder "entrar" en los bloques pero la parte de abajo de su cuerpo es la que debe chocar.
Usando mapas de durezas me fue fácil lograr este efecto, bastaba con especificar bien en que coordenadas tomar los pixeles... Pero este caso me parece diferente :/
Aún aprendiendo a manejar mis herramientas...

KeoH

Quote from: HenBanKeN on June 11, 2011, 05:19:20 AM
Ahora, sobre este mismo tema de bloques con mapas de durezas...
Algunos de los bloques que necesito hacer (solo algunos), son destructibles y aparecen en lugares al azar.
He pensado cómo usar un mapa de dureza para esto, pero no me parece posible. Lo es?

Yo para esos casos usaria "durezas dinamicas" xDD es decir .. cuando el bloke se ponga sobre el terreno, que se pinte sobre el mapa de durezas una sección de forma dinámica. Y cuando ese bloque se destruya pues se pinte en el mapa de durezas el color q no impide el paso. Vamos q sería modificar en tiempo de juego el mapa de durezas, esto no afectaría a la imagen q tienes en el disco duro, solo al mapa q tienes cargado en memoria, q es el q modificas.

SplinterGU

Quote from: HenBanKeN on June 11, 2011, 05:19:20 AM
Muchas gracias por las ideas =O

usando map_get_pixel de forma ingeniosa logré hacer un movimiento redondeado al doblar y quedó de perlas.

Muchas gracias a todos.

Ahora, sobre este mismo tema de bloques con mapas de durezas...
Algunos de los bloques que necesito hacer (solo algunos), son destructibles y aparecen en lugares al azar.
He pensado cómo usar un mapa de dureza para esto, pero no me parece posible. Lo es?
De hecho la alternativa de map_get_pixel creo que no me servirá para esos bloques.

Por lo que he leído sobre collision en estos días desde que llegué al foro, me gustaría mucho evitar esa alternativa... jaja.

Tenéis alguna idea? :3

Saludos!

EDIT: Por cierto, se me olvidaba decir que una de las razones por las que no quería usar collision es porque mi juego está visto desde arriba (como er pokémon), y el personaje es alto entonces su parte superior debería poder "entrar" en los bloques pero la parte de abajo de su cuerpo es la que debe chocar.
Usando mapas de durezas me fue fácil lograr este efecto, bastaba con especificar bien en que coordenadas tomar los pixeles... Pero este caso me parece diferente :/

mas alla de si usas durezas para las collisiones de terreno, lo cual tambien puedes usar collision contra el mapa de durezas, cada personaje tiene que tener 2 procesos que se mueven como 1 solo, 1 de para la colision, y otro para el personaje visible.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2