Ayuda con algo que nunca he programado, bloques que interactúan con el personaje

Started by Shin_Asamiya, February 27, 2015, 11:27:24 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Shin_Asamiya

Resulta que estoy haciendo un juego de prueba visto desde arriba como el Bomberman y necesito meterle los típicos bloques que al chocar con ellos el personaje (y los enemigos), no le dejen pasar y otros que este pueda empujar para moverlos de sitio. Nunca he programado algo así y no tengo ni idea de cómo hacerlo. Lo único que conozco son las colisiones, que creo que para este tipo de cosas no funcionan bien, y los mapas de durezas, que tampoco sirven porque en este caso son procesos móviles contra los que tiene que chocar el personaje.

¿Sabéis cómo puedo implementarle esto a mi juego?

Ulthar Kaufman

Supongo que lo ideal sería hacer el mapa no como un gráfico, sino como una cuadrícula de baldosas (tiles) en un array de dos dimensiones (bx, by), así deformar el mapa y saber si puedes moverte es fácil porque solo consultas un array.

Shin_Asamiya

Ya, pero es que yo quiero que puedas empujar y destruir algunos bloques, con lo cual un mapa no sirve, porque un mapa es fijo ¿no? ¿No se le pueden aplicar las propiedades al propio proceso del gráfico del bloque en cuestión?

emov2k4

se me ocurre que ocupes chipmunk, para evitar el trabajo de los tiles, busca en el foro mod_chipmunk.

warrior_rockk

Maneras de hacerlo hay muchas, y , tratándose de un simple juego 2D, lo mejor es simplificarlo a tus necesidades.
Una manera de hacerlo sería que el mapeado creara un proceso por bloque. Tus bloques tendrán algún flag de que puede ser destruido y/o movido.
Lo importante aquí es resolver el tema de las colisiones, sobre todo para moverlo. Con las funciones de colisión únicamente no te vale, ya que, tienes que saber la dirección de la colisión para poder aplicarle un movimiento al bloque y corregir la posición del personaje. Con lo que, tendrías que hacerte una función ampliada que, si detecta colisión con un proceso bloque, realizando cálculos simples de posición personaje-bloque y tamaño personaje-bloque, puedes averiguar en que dirección colisiona el personaje y cuantos píxeles colisionan. Asi, puedes desplazar el bloque esos pixeles o , si no es movible, corregir la posición del personaje para que no lo atraviese.

Shin_Asamiya

O sea, que ¿lo ideal en este caso es aparte de indicarle que detecte la colisión con el personaje también una serie de condiciones como adonde mira este o a qué distancia se encuentra? Así de golpe lo veo difícil. ¿Algún pequeño ejemplo de cómo podía ser un código así? Con una idea básica para orientarme un poco me conformo.

FreeYourMind

tienes un ejemplo del bomberman incluido en las librerias chipmunk, buscalas y mira el ejemplo tal como ya te han sugerido


FreeYourMind

tienes google ? si pones 'chipmunk library' en el buscador veras lo que es.

Shin_Asamiya

FreeYourMind, si yo pregunto algo en un foro es porque ya lo he buscado y no he logrado dar con una respuesta que comprenda. Quizás sea que no sé buscar bien, no lo niego, pero habemos personas que no manejamos bien cierta terminología.

Cuando yo pregunto algo en un foro, es porque lo necesito. Si estás dispuesto a asesorarme te lo agradezco, pero si tus respuestas van a ser "mandarme al Google" por sistema te agradecería que no escribieras en los hilos que abro, entre otras cosas porque me parece ofensivo.

Yo no obligo a nadie a que me conteste, pregunto para aquellas personas que estén dispuestas a echarme una mano, igual que cuando yo puedo hacer algo por los demás también lo hago, no tienes más que ver el ejemplo de código que pegué en mi hilo sobre control pads por si puede servir a un principiante que esté perdido con el tema. Desde luego, siempre será mucho mejor que "mandarle al Google".

Esta categoría del foro se llama "mesa de ayuda", no "mesa busca en internet y apáñate", ¿no? Ya digo, si mis preguntas te parecen tontas o te doy la impresión de ser un perezoso que no se molesta en buscar nada en internet, sencillamente pasa de participar en mis hilos, es muy sencillo.

Ahora por favor (a los demás), sigamos con el tema. ¿Qué es chipmunk mode y cómo funciona en Bennu? He buscado sobre el tema y no entiendo bien qué es y que relación tiene con lo que quiero hacer en mi juego. Si me pasáis algún enlace que lo explique bien, me parece bien, pero quiero respuestas concretas, por favor.

Ulthar Kaufman

No hay que irse muy lejos, en este mismo foro hay varios posts dedicados a chipmunk, como este: http://forum.bennugd.org/index.php?topic=3413.0 en el que hay unos video tutoriales muy sencillos y lo explican todo. Estarás de acuerdo que no se va a reescribir todo cuando la información está tan a mano. La respuesta básica también te la han dado: es un motor de físicas.

Si no quieres complicarte mucho, lo más sencillo sería tener las partes móviles del mapa como procesos, e interactuar con ellos con las collisions y tal vez los get_dist y get_angle, depende mucho de lo que quieras hacer exactamente.

Shin_Asamiya

Vamos a ver.

Lo primero de todo es que ya expliqué arriba muy claramente lo que quiero hacer, pero por si no queda claro lo repito copiándome a mi mismo:

"Estoy haciendo un juego de prueba visto desde arriba como el Bomberman y necesito meterle los típicos bloques que al chocar con ellos el personaje (y los enemigos), no le dejen pasar y otros que este pueda empujar para moverlos de sitio."

Ahora bien, no entiendo porqué se me manda a buscar tutoriales de un motor de física en 2D cuando lo que yo estoy solicitando es ayuda con el código de Bennu. Es decir, mi pregunta se refiere a de qué manera se hace eso programando con el lenguaje de Bennu. Me parece bien que a algunos les vaya estupendamente usando motores pero no es eso lo que yo estoy preguntando.

No deja de ser curioso que me manda a "buscar en Google" y a leer tutoriales, como tildándome de perezoso, gente que al parecer ni siquiera se molesta en leer y comprender lo que estoy preguntando.

Yo imagino que muchos de los que estáis aquí habréis hecho cosas similares desde el programa sin usar motores y posiblemente de forma muy sencilla. Pero yo, como ya dije, llevo muchísimos años sin programar y tampoco es que sepa mucho (aparte que yo programaba en DIV2).

¿Tan difícil es orientarme diciendo algo como "yo en tu lugar haría que detectara la colisión según esta, esta y esta condición para que hiciera tal o cual cosa y en base a eso seguir desarrollando el hilo con preguntas mías y respuestas de otros?

No quisiera parecer violento pero me pone muy nervioso cuando pregunto sobre A y se me contesta sobre B, y si encima se me manda al Google a buscar por mi cuenta ya...

Por favor, agradezco que participe en este hilo la gente que quiera ceñirse a la información que solicito de forma concreta, lo demás es desviarme el hilo por otros derroteros y acabar alejándolo de su propósito inicial. Y el que no quiera ayudarme lo tiene fácil, que no participe, que yo no estoy obligando a nadie.

FreeYourMind

Podrias venir aqui a que te hagan la papilla, si fuera un foro de soporte de alguna empresa que te tenga como cliente y tengas contratado soporte, pero te equivocas, aqui la peña se ayuda una a otra por amor al arte, somos colegas y amigos, una familia, no estamos aqui posteando porque nos sobre el tiempo precisamente....

Reitero lo que te dije en el otro hilo, cuando vienes aqui a pedir algo gratis tienes que entender que la peña te ayudará de buen rollo si demuestras algo de tu parte, pero si lo haces de forma borde, vaga y chulesca no creo que tengas mucho exito, y mucho menos tienes que imponer cosas como que sólo quieres que te dejen los deberes ya hechos...

emov2k4

Concuerdo con FreeYourMind, se ve en tus comentarios un tono un poco arrogante exigiendo ayuda, debes tranquilizarte, aqui tu no pagaste por bennu, tratamos de hacer lo que podemos en ayuda y es solo eso ayuda, no obligación.... pero bueno, como te dije busca mod_chipmunk, ya te dieron un link con un video tutorial...  ademas el mismo chipmunk trae un ejemplo de juego bomberman.

Solo es cosa de buscar.

Saludos

gecko

Ese motor de fisicas se puede hacer andar dentro de Bennu, por eso es que te lo sugirieron. Era una respuesta a tu consulta.

Pero por otro lado lo que se me ocurre podes hacer es manejar toda la logica del mapa en una matriz, y antes de mover el personaje chequear si existe una caja en esa direccion, y si esa caja puede ser empujada, y solo en ese caso hacer que el personaje y la caja se muevan.

Es una idea super basica lo que te estoy diciendo, pero tal vez te sirva.
Torres Baldi Studio
http://torresbaldi.com