Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Shin_Asamiya on February 27, 2015, 11:27:24 AM

Title: Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on February 27, 2015, 11:27:24 AM
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?
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Ulthar Kaufman on February 27, 2015, 12:56:40 PM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on February 27, 2015, 01:17:52 PM
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?
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: emov2k4 on February 27, 2015, 08:47:40 PM
se me ocurre que ocupes chipmunk, para evitar el trabajo de los tiles, busca en el foro mod_chipmunk.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: warrior_rockk on February 28, 2015, 10:09:23 AM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on February 28, 2015, 10:57:00 AM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: FreeYourMind on February 28, 2015, 11:01:46 AM
tienes un ejemplo del bomberman incluido en las librerias chipmunk, buscalas y mira el ejemplo tal como ya te han sugerido
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on February 28, 2015, 04:29:52 PM
Pero ¿qué es exactamente eso de chipmunk?
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: FreeYourMind on February 28, 2015, 09:54:30 PM
tienes google ? si pones 'chipmunk library' en el buscador veras lo que es.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on March 01, 2015, 01:54:22 PM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Ulthar Kaufman on March 01, 2015, 06:26:09 PM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on March 01, 2015, 08:32:35 PM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: FreeYourMind on March 01, 2015, 11:32:36 PM
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...
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: emov2k4 on March 02, 2015, 12:58:08 PM
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
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: gecko on March 02, 2015, 01:44:01 PM
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.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: warrior_rockk on March 02, 2015, 04:54:32 PM
Coincido con la gente que ha posteado que estas no son maneras de solicitar ayuda. Por tus comentarios das a entender que no sabes lo que es un motor de físicas 2D, lo cual me parece perfecto, pero , precisamente por esa ignorancia deberías preguntar con mas humildad ya que, te están dando la respuesta a tu pregunta.


Por otro lado, y centrándonos en el tema de nuevo, en mi opinión, utilizar el motor de físicas 2D en este caso lo veo matar moscas a cañonazos. El problema tiene solución mas simple que tener que usar una librería completa de físicas.
Siguiendo con la idea que he explicado en mi primer post, puedes crearte una función de comprobación de colisiones con bloques que haga los siguientes cálculos:


obtienes los vectores de diferencia de posicion entre player y bloque:   vX = personaje.x - bloque.x;    vY = personaje.y - bloque.y;
sumas las mitades del ancho y alto de los procesos:                              hW = (personaje.ancho/2) + (bloque.ancho/2); 
si los vectores vX y vY son menores que las mitades de anchos y altos, ESTAN colisionando:  if (abs(vX) < hW && abs(vY) < hH)

Ahora solo tienes, dentro de este if, obtener el lado por el que colisionan de esta manera:
restas a las mitades de ancho y alto sus vectores:  oX = hW - abs(vX);   oY = hH - abs(vY);
if (oX >= oY)
       if (vY > 0)
      //colsiona por arriba
      else
     //colisiona por abajo
    end;
else
    if (vX > 0)
    //colisiona por al izqueirda
    else
    //clisiona por la derecha
end;

Una vez sabes por donde colisiona, puedes actualizar y mover el bloque el numero de pixeles por la dirección de colisión a los que "empuja" el personaje.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on March 03, 2015, 10:36:29 AM
Ya dije que yo no exijo ayuda a nadie. Contesto con tono borde cuando me contestan borde, así de simple. Si pasaran los días y nadie me ayudara pues tendría que fastidiarme, eso lo entendería. Lo que no entiendo es que se me contesten cosas como esta:

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

Eso es borde, se mire por donde se mire. Y si se revisan mis anteriores mensajes se comprobará que no hay nada borde en ellos hasta que no se me provocó con eso. Lo que pasa es que me conozco como funcionan los foros, son muchos años ya. Llega el típico que tiene tropecientos mensajes, te contesta con mala leche, los amiguetes hacen la vista gorda, llego yo, que soy nuevo, le contesto como es debido y se me dice que el borde soy yo.

Por otro lado, nadie ha pedido aquí que "se me de la papilla hecha". Nadie ha exigido nada, y creo que cualquiera que lea mis posts con detenimiento y sin animosidad podrá comprobarlo. Empecé de forma muy educada y sin ningún tipo de arrogancia, pero si me contestan de forma prepotente y burlesca, tratándome como si fuera un vago que ni se ha molestado en buscar las cosas, yo contesto con la misma dureza. Yo no vengo a un foro a que se me falte al respeto, se tengan la cantidad de mensajes que se tengan y el karma que se tenga, me es indiferente, y eso sí lo exijo, el respeto. O sea, yo me he quejado de una falta de respeto no de que no se me ayude como espero, hay que diferenciar conceptos.

Mandar al google o al buscador a una persona cuando pregunta algo es un acto de prepotencia y arrogancia, es una provocación, pero eso por lo visto nadie lo ha querido ver, en cambio se me acusa a mi de eso. En fin, allá cada uno, pero ahí están las pruebas, para el que las quiera ver. Decidme qué frase de mis posts anteriores a ese que he copiado es arrogante o borde. Si no sois capaces de copiarme ninguna lo vuestro es una difamación.

warrior_rockk, te digo lo mismo que a los demás. La falacia en la que estáis incurriendo es que yo no solicité ayuda de forma arrogante, ni me faltó humildad, que de paso te digo que ignorar algo no te coloca por debajo en ninguna jerarquía, no confundamos humildad con sumisión, es decir, yo puedo ser humilde, pero no sumiso y aguantarme con las burlas del personal sólo por que desconozca algo de Bennu, eso es irrelevante, se trata de un mínimo de respeto entre personas. Insisto, lee los posts antes de la falta de respeto de Freeyourmind y comprobarás que así es (que por cierto, ya en otro hilo me escribió con unas confianzas y con un tono que no es el adecuado, cambiando el tema principal, e hice la vista gorda). Te repito lo mismo, yo no me he quejado de cómo se me ayuda, faltaría más, me he quejado de un post que es insultante y ofensivo. A mi se me puede pedir humildad cuando se es humilde conmigo, pero si un tío se burla de mi y espera que me calle me está pidiendo sumisión. Me da igual que tenga más de 3000 mensajes y sea el puto amo del foro, como si es el admin y me banea, yo voy a contestarle como se merece, punto. Es muy sencillo de entender.

Gracias por tu ayuda de todos modos, era algo así de sencillo lo que pedía.

Ahora si queréis banearme o lo que os de la gana, adelante. Pero yo no voy a permitir que ningún chulo que además no me conoce de nada se me suba a donde nadie le ha dicho que se suba.

PD: Me preguntaba porqué este foro está tan vacío, ahora lo entiendo. Es un fenómeno que he visto en muchísimos foros, se van quedando 4 amiguetes liderados por algún borde y se va yendo la gente nueva, que se encuentra con un ambiente hostil. Ya digo que son muchos años ya. Me parece que habéis perdido otro participante.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: warrior_rockk on March 03, 2015, 11:34:55 AM
No conozco a la gente de este foro ni soy un asiduo de mucho años. Simplemente de manera objetiva (objetiva desde mi propia subjetividad), me pareció fuera de lugar la reacción a que te manden buscar a google. También llevo mucho tiempo visitando foros y , a veces consigo respuestas, a veces no, y a veces las respuestas no me aportan nada, pero no veo motivo para la indignación.
Por tu manera de expresarte entiendo que eres una persona de cierta edad, con lo que, supongo que no quieres perder más tiempo con estas discusiones en un foro de programación así que, si os parece, volvemos al tema principal del post.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: FreeYourMind on March 03, 2015, 12:05:15 PM
Te equivocas Shin Asamiya, te apuesto que en otros foros si entras con esta actitud los foreros te responderan con la misma actitud que he hecho yo.

No puedes venir a pedir ayuda a un foro y que la gente te recomiende mirar una determinada funcion en un manual o ejemplo de algun juego en concreto por ejemplo, y tu soltar la perla de que pasas de mirar en el manual o buscar en codigo fuente de terceros y lo que quieres es que la peña te ponga la papilla en el plato directamente.

Como ya te dije para que la gente te ponga cierta papilla en el plato tambien tienes que hacer alguna consulta, porque nadie tiene el manual plasmado en la cabeza.

Me hace gracia que digas que pasas de buscar en el codigo fuente de terceros, cuando ya le gustaria a mucha gente poder tener el codigo fuente de terceros para buscar alguna duda o mirar como se hace determinada cosa....

Enfin, llamame borde como prefieras, pero aqui yo no lidero nada ni a nadie, soy un usuario más. Y si quieres estar tienes que respetar a los demas si quieres que te respeten
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: FreeYourMind on March 03, 2015, 12:13:36 PM
Y sobre lo de enviarte a google, es muy sencilla la explicación:

Primero, al buscar en google te sale directamemente la wiki y asi puedes ver al detalle de que tecnologia estamos hablando...

Segundo, ha sido para confirmar lo vago que eres que nisiquera has tenido el detalle de pensar algo así:

"vale, tampoco se que es esto del chipmmunk, dejame mirar antes en google, y asi ya formulo mejor y filtro mis dudas para que la peña me ayude y ver si esta tecnologia me vale o uso otro metódo..."

Lo tuyo era preguntar de chulo, todo lo que te digan no lo ibas a mirar, asi que deja de tratarnos como crios, porque no somos tontos, incluso me apuesto que lo tuyo ha sido venir a reirte de los que estamos con preguntas tontas para sacarnos de nuestras casillas.


Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Ulthar Kaufman on March 03, 2015, 03:24:34 PM
Shin, yo llevo aquí apenas unas semanas, estoy empezando como tu, y en ningún caso he sentido indiferencia por parte de los usuarios veteranos, al contrario.

Dices que en todos los foros te pasa lo mismo, si entras con esa hostilidad... normal que la historia se repita. Tal vez deberías reconsiderar tu actitud.

Aceptame un consejo: tómate una tila. Y yo por mi parte lo dejo aquí, que ya estoy muy mayor para estas cosas.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: Shin_Asamiya on March 03, 2015, 07:13:48 PM
Gracias, Comandante, lo miraré.

Con lo sencillo que es ayudar en lugar de tocar los cojones, en fin  ::).

Yo ya digo, me despido del foro. Espero que la peña aquí aprenda a respetar y a dar bienvenidas en condiciones a los que vengan nuevos porque si no me temo que seguirá muerto esto.

Adiós.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: FreeYourMind on March 03, 2015, 08:00:00 PM
Cierre al salir. Gracias.
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: SplinterGU on March 04, 2015, 11:55:13 AM
Quote from: Shin_Asamiya on March 03, 2015, 07:13:48 PM
Gracias, Comandante, lo miraré.

Con lo sencillo que es ayudar en lugar de tocar los cojones, en fin  ::).

Yo ya digo, me despido del foro. Espero que la peña aquí aprenda a respetar y a dar bienvenidas en condiciones a los que vengan nuevos porque si no me temo que seguirá muerto esto.

Adiós.

epa! no he leido el hilo y ni se que paso... estoy con miles de problemas personales y de salud... pero ten paciencia, hay mucha gente en el foro, ya te respondera alguno de la forma que necesitas...
Title: Re:Ayuda con algo que nunca he programado, bloques que interactúan con el personaje
Post by: DCelso on March 04, 2015, 03:01:38 PM
Quote from: Shin_Asamiya on February 27, 2015, 01:17:52 PM
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?
Error, el mapa lo puedes cambiar constantemente, no deja de ser una matriz de datos , y es lo más facil que puedes usar para lo que buscas.
Un ejemplo sencillo, el juego de tic-tac-toe (o tres en raya)
Tienes un mapa o tablero de 3x3 casillas (es decir 9 casillas)
Pues la solución más directa es crear una matriz de 3,3 de enteros y ahora crearte un mapeo de números que vas a usar y su significado.
por ejemplo:
0 casilla vacía
1 casilla ocupada por ficha blanca
2 casilla ocupada por ficha negra.
pones todo a 0 por defecto quedando esta matriz
000
000
000
ahora creas una función que pinte tu tablero en pantalla, que haría algo como recorrer el mapa y mirar que valor tiene, si tiene un 0 dibucas un cuadrado vacío en pantalla, si tiene 1 un dibujas un cuadrado con un circulo blanco en el centro y si tiene un 2 dibujas un cuadrado con un circulo negro en el centro.
ahora le pides al usuario que ponga una ficha y le dices columna y fila, y si te da coluna 2, y fila 2 pues tu vas y pones en esa posición de tu mapa un 1 y te quedaría
000
010
000
ahora llamas a tu pintar fantástico de antes y refleja el cambio en pantalla
ahora el computador elige hueco asi que recorres la matriz buscando un 0, ya que si hay un 1 o un 2 es que está ocupado. pones por ejemplo un 2 en fila 1 columna 1 y te queda
200
010
000
vuelves a llamar a tu pintar y actualiza la pantalla
pues ahora al jugador le pides otra vez y verificas que la posicion que te de haya un 0 porque si no hay una ficha suya o del computador.

Pues ya está así ya luego haces las comprobaciones que necesistes para saber si uno gana o pierde.

en tu ejemplo es igual, te creas un mapa de números y significados y vas jugando con ellos
por ejemplo el 1 significa jugador, el 2 muro indestructible, el 3 muro movil, etc.
pues si al mover al jugador a una posición hay un muro indestructible haces que el jugador no se mueva y se quede donde está
si al mover el jugador hay un muro movil, pues lo mueves una posición en la misma dirección que ibas a mover al jugador. actualizas tu mapa, pones un 0 donde estaba el muro y un 3 en su nueva posición, y vuelves a llamar a tu pintar fantastico que actualizará la pantalla.

Esta técnica es la más básica y práctica para todo tipo de juegos de casillas. tienes muchos ejemplos disponibles en el bennu pack.
e incluso en mi firma en el apagame tienes un ejemplo del tictactoe entre otros muchos mas juegos de tablero.

Espero que esto sea lo que vas buscando. porque como dicen mis compañeros hacerte el juego no te lo va a hacer nadie, tendrás que ser tu mismo con la ayuda voluntaria que te vayamos ofreciendo a partir de lo que entendamos que preguntas ;), suerte y al lío , a ver si proto vemos un juegazo tuyo por aquí y te felicitamos ;D :D ???