Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: BlySntK on May 23, 2012, 01:42:28 PM

Title: Dudas circunstanciales
Post by: BlySntK on May 23, 2012, 01:42:28 PM
Buenas a todos bennuseros!! Vengo con algunas dudas que quiero solventar aquí. Estoy ya montando en código el juego hibrido plataformas/aventura gráfica y necesito que el personaje pueda saltar en las secciones donde podemos andar por un camino "abiertamente". He pensado bastante en utilizar la sombra del personaje como medio para que pueda realizar el salto en caminos anchos, ya que en las plataformas no hará falta. La cuestión es, cómo hacer que el personaje detecte la dureza de su sombra y de ahí que pare el salto... He intentado hacer pruebas haciendo una sombra en versión cutre de 16 bits xD si es que lo son... pero no termina de salirme. Hice la sombra como hijo del proceso personaje, pasandole a través del padre, sus coordenadas de posición teniendo como punto central sus pies y los de la sombra la parte medio central... ¿qué hago mal?
Title: Re:Dudas circunstanciales
Post by: gecko on May 23, 2012, 01:57:21 PM
Se me ocurre que para el tema del salto al personaje le asignes 3 coordenadas: pos_x, pos_y, altura;
La sombra la mostrás siempre en la pos_x, pos_y del personaje, ignorando la altura (o tomando la altura como 0 en realidad).
Y para el salto en lugar de cambiar la coordenada y, cambies la coordenada altura... y la coordenada y la calculas con pos_y y altura.

De esa manera las durezas las podes ir detectando con pos_x,pos_y y al salto le podes ir ajustando la velocidad, aceleración, y duración sin preocuparte por los otros movimientos del personaje.
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 23, 2012, 02:07:22 PM
thanks gecko... es una buena manera aunque si te soy sincero no me termino de aclarar. Imagino que las variables; pos_x, pos_y y altura, las puedo meter o privadas al personaje, o globales, eso por un lado... entonces, mi pregunta es, guardo la posición actual del proceso tanto de la x como de la y en ambas variables, y la altura cómo la uso? Seria la altura la que tengo que meter la fuerza de salto del personaje o la altura se la pongo privada al proceso sombra... esos conceptos debo aclararlos.
Title: Re:Dudas circunstanciales
Post by: gecko on May 23, 2012, 03:02:55 PM
la pos_x ahora que lo pienso no se si te hace falta, pero para que quede todo mas ordenado podrias usarla igual! xD

Y si, pos_x, pos_y, y altura pueden ser privadas del personaje.
Y el truco esta en que en lugar de usar las x,y para luego pasarlas a pos_x,pos_y... yo te decía hacer lo contrario: manejar todo el movimiento del personaje (y de la sombra) usando las variables pos_x, pos_y. Manejar la altura del personaje usando la variable altura. Y luego, justo antes del FRAME del personaje, calcular x,y teniendo en cuenta la pos_x, y pos_y - altura.

Y para la sombra, también dentro del personaje y antes del frame podes hacer algo como sombra.x = pos_x; sombra.y = pos_y;

No se si ahi quedo un poco mas claro.
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 23, 2012, 03:17:45 PM
Se va aclarando, sí, no es tan dificil la verdad... simplemente, nada mas iniciar el loop del personaje, guardar las coordenadas en las variables, usarlas y, antes del frame... cotejarlas con las coordenadas actuales... Eso lo entiendo sin problemas. La duda que me queda, suponiendo que la variable altura la usamos para saltar, imagino que querras decir pasarle al proceso salto (que es lo que tengo) la variable altura con el impulso del salto y que la sombra permanezca en el suelo, que no suba con el personaje... Cómo pasarla al proceso salto si es privada de personaje? Podrías decirme si estoy en lo correcto? La variable altura es la que mas se me atraganta
Title: Re:Dudas circunstanciales
Post by: gecko on May 23, 2012, 03:27:24 PM
aaa aaaa, yo pensé que manejabas todo desde el proceso personaje.

Entonces lo que podes hacer es declarar jugador_x, jugador_y, jugador_altura como globales, y que cada proceso las use y modifique a su antojo.

La sombra se dibujará en jugador_x, jugador_y.
Y el jugador en algo como jugador_x, jugador_y - jugador_altura;
Title: Re:Dudas circunstanciales
Post by: gecko on May 23, 2012, 03:29:12 PM
Agrego: haciéndolo de esta forma me parece que hay que prestarle atención al orden en que se ejecutan los procesos... porque por ejemplo si se dibuja primero la sombra, y después se mueve el personaje... la sombra siempre estaría atrasada 1 frame con respecto al personaje.
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 23, 2012, 03:36:54 PM
A ver, que me empiezo a liar un pelín... te comento:

Voy a tener tres procesos, ok? Jugador, sombra (hijo de jugador) y Salto... Entonces, declaro como globales pos_x, pos_y para usarlas con Jugador y con sombra... por tanto la sombra "heredará" las coerdenadas de Jugador... Eso lo hago sin problemas. Ahora viene cuando la matan xD; yo entiendo que así como el proceso sombra es un gráfico a parte negro para el jugador (dándo igual el tamaño y la forma pues su centro siemrpe estará arriba) y por tanto, en teoría debería ir junto con el Jugador. Lo que necesito es que la sombra, al saltar el Jugador, se mantenga en el suelo para que actue como un segundo suelo (el primer suelo es la base del escenario y por tanto se pondría encima); cómo hago para, primero, que no siga al proceso Jugador cuando la y del proceso le damos valor de salto y por ello sea una dureza más para que el Jugador sepa donde frenar y, segundo, la variable que da el impulso al proceso salto entonces debería ser la altura, no? Para situarme...
Title: Re:Dudas circunstanciales
Post by: Erkosone on May 23, 2012, 06:30:37 PM
Hola, yo lo resolvería así:


Crear varaible global "saltando = 0"


En el proceso Jugador:
- De alguna manera activas el salto verdad? pues haz que mientras el jugador está saltando..   la variable global "saltando = 1", cuando termine el salto "saltando = 0"


En el proceso Sombra:
- Si saltando = 0 entonces 'x = pos_X' y también 'y = pos_Y' pero si saltando = 1 entonces x = x; y = y; fin.


Con esto simplemente haces que la sombra no se mueva cuando el jugador salta, si tienes dudas sobre como saber cuando detectar el salto del jugador siempre puedes hacerlo por la detección de durezas del propio jugador, algo así como:  si toco suelo -> saltando  = 0       si no toco suelo -> saltando = 1


También puedes dejarlo un poquito mas refinado si desde el proceso sombra mides la distancia con el jugador y le aplicas a SIZE un valor menor de 100 en función de la distancia, así parecerá que cuando el jugador se aleja la sobra se encoje dando un punto mas real.


También puedes tener en cuenta que.. si la Y del jugador es MENOR que la Y de la sobra.. entonces es que el player está calléndo por debajo de la sombra, entonces si se cumple esto
en el proceso de la sombra : size = 0;  y escondes la sombra para evitar el error gráfico de ver el personaje atravesar su propia sombra.




No se si es esto lo que buscabas, si no es así sorry.
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 23, 2012, 07:32:32 PM
CIERTAMENTE algo así estaba buscando; cree dos variables globales para usarlas en vez de las coordenadas del jugador (más comodidad) y la variable salto es la altura que el jugador coge, por tanto, eso lo tenía ya predispuesto, me salta sin problemas así... Estoy mirando de que precisamente la sombra no se mueva de donde debe quedarse y sólo siga al jugador (pero realmente pensandolo... creo que es de lo mas sencillo que hay xD). He pensando, en poner la sombra en el suelo con una X "fija" pero siempre siguiendo al jugador poniendo father.x pero desde el suelo, es decir; father.y-valor... cuando salte (efectivamente con la variable saltando que activa el salto), hacer que la y de la sobra se quede donde está y que sólo suba la x del jugador :) Aún no lo he hecho, se me acaba de ocurrir ahora, sí me sale (que debería salirme) os lo comunico... pero no cerraré el tema porque... los escenarios, al tener que merlos en scroll y ser todo capas, y la mayor parte del escenario es independiente, se mueve a distintas velocidades, deberé de ponerlo en varios scrolls, supongo que no será mas lejos que usar cuatro o cinco scrolls pero... no sé seguro... xD
Title: Re:Dudas circunstanciales
Post by: gecko on May 23, 2012, 08:46:48 PM
Igual la sombra se tendría que quedar en un plano solo del scroll , no?

Me resulta divertido lo difícil que es para cada uno meterse en la situación y el código del otro... Cada juego es un pequeño mundo! :D
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 25, 2012, 10:29:22 AM
Estoy teniendo problemas extraños con map_get_pixel... Mientras el personaje que se maneja pilla sin problemas los pixeles del primer fondo del scroll de un camino... No pasa lo mismo con su sombra, no le da la gana de pillarme los pixeles aun estando en el mismo scroll; he mirado profundidades, hacerlo proceso independiente al persona y hacerlo hijo... estoy mirando paletas (porque a veces me ha pasado... que no es el mismo color que las paletas) pero sé que está bien.... No entiendo a qué viene este error...
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 25, 2012, 12:14:29 PM
A ver, os comento... He encontrado en el viejo foro de DIV un tema que es perfectamente lo que quería encontrar salvo que no hay código alguno elaborado para tener un ejemplo fácil y yo, simplemente, utilizarlo. Os pongo las dudas que encuentro y, por favor, si me las podríais resolver. Está MUY claro que no es lo mismo un simple plataformas (el cual domino sin problemas) y un Beat em up, que uno se puede mover por el escenario con sus límites y tal y no caerse... Parece ser que la gravedad aún existe pero, al no haber durezas (o al menos eso entiendo yo) no se exactamente cómo funciona. Tambien hay que cuidar la profundidad, eso lo llego a entender bien pero no entiendo el algoritmo...

Os expongo mis dudas:

INTERACCION

X,Y,Z,FLAGS,GRAPH y ESTADO deben guardarse en variables accesibles para todos los procesos interactivos : ENEMIGO, ITEM, OBJETO, todos deben saber todo.

ENEMIGOS y PERSONAJES deben enviarse información mutuamente sobre el daño que va a hacer el ataque, el sonido que va a reproducirse, el tipo de efecto que hace el ataque : una puñalada suelta sangre, un tortazo un destello, un misil una explosión, etc.

Es necesario saber el número de enemigos que hay en pantalla, para lanzar otra ronda de enemigos o para mover la camara, que espera que lleguen a 0.

Es muy importante prestar atención al valor del daño que causa un ataque, pues decidirá si el juego puede ser tactico, si un personaje es mejor que otro o si todo esta a boleo.

Lo que está en negro es lo que no llego a entender cómo sería en código. Es decir, lo de que el scroll se pare entiendo que puede ser gracias a una variable que, comprobandola, haga que el scroll pase a ser una pantalla fija (imagino) y que luego vuelva al scroll a terminar su recorrido si no hay más enemigos, pero aquí la pregunta, ¿cómo hago para que el scroll termine su recorrido?

Y lo segundo... valor de daño, supongo que se referirá más que nada, a los atributos que le deba poner al personaje para saber lo que quita y deja de quitar.

Despues:

PRIORIDAD

IF (limite_superior_escenario<y && limite_inferior_escenario>y && estoy_en_el_aire==0) z=-y; END

Con esto tenemos la prioridad Z controlada, el personaje se verá por delante o por detras siempre correctamente, si tenemos la barra de energia arriba con una Z superior a 0, podría verse tapada por un personaje enviado a las nubes, si saltamos la Z debe ser la misma, no nos hemos movido del sitio, además nos aseguraremos de que la interacción con el resto de elementos que necesitaban saber Z es correcta.

La gran pregunta... ¿Existe gravedad o no...? Qué significa z=-y... cómo influye eso en un salto de una ubicación del mismo camino a otra ubicación del propio camino... Eso sí que no lo entiendo.

¿Por qué expongo esto? Porque por mucho que sea una aventura gráfica y a la vez, un plataformas... estoy tanteando en hacer que en las secciones que sean aventura gráfica el personaje pueda saltar o no (que sería interesante poderlo saber hacer por si acaso) y así conocer más a fondo el algoritmo para poderlo utilizar más adelante.
Title: Re:Dudas circunstanciales
Post by: gecko on May 25, 2012, 04:05:30 PM
creo que llego un poquito tarde, pero prepare un ejemplito con el tema de las coordenadas y la sombra...
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 25, 2012, 04:39:58 PM
No gecko, no has llegado para nada tarde!!! Esto es lo que estaba buscando, sí!!! Oh, dios, gracias chaval... te mereces un karma++ Podrías explicarme a grandes rasgos cuales son los fundamentos???? He mirado el código, así por encima... y no parece demasiado complejo... aun así, sí me gustaría que me explicarás un poco sobre todo la profundidad, la z, cómo se maneja


edito: Ahora lo acabo de mirar más exahustivamente y.... entiendo perfectamente el código... lo único que aún s me queda en duda es, más que nada, el algoritmo ese de: z=-y ... No sé muy bien qué significa, y menos z=-(pos_y-limite_superior) ... ¿Qué se le está restando a la profundidad? Entonces, no hace falta poner durezas para saltar en un escenario, realmente... sólo que, cuando saltas, daría lo mismo poner en un proceso a parte el salto, pasandole la variable en cuestión con el valor de salto y que se fuera descontando hasta llegar a 0... pero, no sé muy bien que valor darle para que me haga una gravedad sin que el jugador salga de la pantalla, no sé si me explico... Es decir, para que, pulsando por ejemplo espacio para saltar, el límite hasta llegar a 0, no haga que se salga del marco inferior de la pantalla...
Title: Re:Dudas circunstanciales
Post by: gecko on May 25, 2012, 05:09:04 PM
Ah, si, de paso explico que se maneja con las flechas y con space "salta" :D

Bueno, lo que hace el proceso jugador es manejar sus coordenadas como te había sugerido, con sus variables pos_x, pos_y, y altura.
Al cambiar el valor de la altura (con space) fijate que no cambian ni la pos_x, ni la pos_y. pero si cambia la posición en pantalla.
Entonces la idea es que todos los movimientos (y durezas, etc) los realices en base a la pos_x, y la pos_y... y que los valores x,y (posiciones en pantalla, o en scroll), sean solamente calculadas al final.
Desde el mismo jugador actualizo la posicion de la sombra para que siga la pos_x, pos_y (pero sin tener en cuenta la altura).

Y para la z, lo que hice fue calcular la distancia a la que se encuentra del limite superior de movimiento, e invertirla.

Estoy pensando que si el salto lo manejas con un proceso aparte, deberias declarar pos_x, pos_y y altura como globales y que ambos procesos usen directamente las globales.
Title: Re:Dudas circunstanciales
Post by: BlySntK on May 27, 2012, 04:57:42 PM
Quote from: gecko on May 25, 2012, 05:09:04 PM
Ah, si, de paso explico que se maneja con las flechas y con space "salta" :D

Bueno, lo que hace el proceso jugador es manejar sus coordenadas como te había sugerido, con sus variables pos_x, pos_y, y altura.
Al cambiar el valor de la altura (con space) fijate que no cambian ni la pos_x, ni la pos_y. pero si cambia la posición en pantalla.
Entonces la idea es que todos los movimientos (y durezas, etc) los realices en base a la pos_x, y la pos_y... y que los valores x,y (posiciones en pantalla, o en scroll), sean solamente calculadas al final.
Desde el mismo jugador actualizo la posicion de la sombra para que siga la pos_x, pos_y (pero sin tener en cuenta la altura).

Y para la z, lo que hice fue calcular la distancia a la que se encuentra del limite superior de movimiento, e invertirla.

Estoy pensando que si el salto lo manejas con un proceso aparte, deberias declarar pos_x, pos_y y altura como globales y que ambos procesos usen directamente las globales.

Bueno, comentar gecko y quien haya querido ayudarme en este tema que está ya solventado :) Ya me hace lo que debía, ahora sólo es adaptar lo que tengo al código y continuar... he de montar las capas de la primera pantalla que tengo en los scrolls, espero que no me den demasiados problemas, los único que deseo tener sólo son para poner bien las coordenadas, porque hay objetos que van por separado... y hasta no encontrar la coordenada exacta... mal... pero vamos, no creo que suponga demasiado... De serlo, os vendré a joder un ratillo, que sé que os mola :P jajajajaaj Gracias tíos!
Title: Re:Dudas circunstanciales
Post by: BlySntK on June 09, 2012, 11:13:10 AM
Bueno, mientras os decidis a ver quién es el guapo xD que me ayuda con el proyecto que tenemos entre manos, pediré ayuda para lo que todavía puedo hacer yo... que es ir montando las capas de la pantalla en el/los diferente(s) scroll(es). Tengo exactamente el orden en que aparecerán, lo expongo aquí para que me digáis si sería bueno poner cada capa en su respectivo proceso o, poner en un solo proceso todos los scrolls... cosa que no veo optimizado ni factible... Casi sería mejor poner en cada proceso, en orden de aparición lo que toque poner, ya sea scroll o pantalla fija. Y sí, ya sé que la mejor solución para optimizar y ahorrar en recursos serían las tiles, pero.... ya miraré más adelante eso xD No creo que sea muy imprescindible, aquí el orden de las capas:

capa_01_niebla
capa_02_ramas
capa_03_barandilla
puente_bloqueado_desbloqueado
*** AQUI PONDRIAMOS A MATHEW ***
capa_04_suelo
*** AQUI PONDRIAMOS LOS ARCHIVOS QUE NO SE LLAMAN CAPAXX, es decir, el ahorcado, el sello, el monstruico, la luz intermitente
capa_05_niebla_fondo
capa_06_fondo_bosque_1
capa_07_fondo_bosque_2
Title: Re:Dudas circunstanciales
Post by: KeoH on June 09, 2012, 06:45:33 PM
BlySntK .. me da la sensacion q quieres tener el juego terminado en tiempo record xDD paciencia hombre .. no te estreses y ve haciendolo poco a poco ... q parece q tienes un jefe q te ha puesto fecha limite xDDD
Title: Re:Dudas circunstanciales
Post by: BlySntK on June 09, 2012, 06:56:04 PM
Quote from: KeoH on June 09, 2012, 06:45:33 PM
BlySntK .. me da la sensacion q quieres tener el juego terminado en tiempo record xDD paciencia hombre .. no te estreses y ve haciendolo poco a poco ... q parece q tienes un jefe q te ha puesto fecha limite xDDD

Vale vale... si yo paciencia tengo... lo único eso, que me echéis una manilla con eso porque tengo una duda de cómo va... ná más :)
Title: Re:Dudas circunstanciales
Post by: Erkosone on June 10, 2012, 12:51:29 AM
Sobre lo de los procesos para las capas, mi recomendación es que SIEMPRE te plantees esta pregunta antes de hacer algo:  Puedo hacer lo mismo desde 1 solo proceso? si puedes.. hazlo, un proceso, aunque a ti te parezca que es una bobada.. en realidad es un gasto considerable de CPU, quizá en un PC o Mac no se aprecia demasiado, pero cuando algún día intentes portar tu juego a un disp. portátil verás que esos procesos qeu no son necesarios son los que están consumiendo todos los recursos de la CPU del portatil, ya sea en android, en iPHone o en lo que sea.


Mi respuesta es, NO, no uses 1 proceso para cada capa, mete todo el control en un solo proceso, no tengas miedo a que el código de un proceso sea muy grande, eso no tiene importancia, pero desperdiciar la CPU en procesos innecesarios si que la tiene.
Un saludo.
Title: Re:Dudas circunstanciales
Post by: BlySntK on June 10, 2012, 09:09:56 AM
Quote from: Erkosone on June 10, 2012, 12:51:29 AM
Sobre lo de los procesos para las capas, mi recomendación es que SIEMPRE te plantees esta pregunta antes de hacer algo:  Puedo hacer lo mismo desde 1 solo proceso? si puedes.. hazlo, un proceso, aunque a ti te parezca que es una bobada.. en realidad es un gasto considerable de CPU, quizá en un PC o Mac no se aprecia demasiado, pero cuando algún día intentes portar tu juego a un disp. portátil verás que esos procesos qeu no son necesarios son los que están consumiendo todos los recursos de la CPU del portatil, ya sea en android, en iPHone o en lo que sea.


Mi respuesta es, NO, no uses 1 proceso para cada capa, mete todo el control en un solo proceso, no tengas miedo a que el código de un proceso sea muy grande, eso no tiene importancia, pero desperdiciar la CPU en procesos innecesarios si que la tiene.
Un saludo.

gracias Erko... Era lo que necesitaba saber. Pues como va por orden ascendente de capa, tendré que ir metiendo los scrolls o las pantallas fijas en sucesion, una detrás de otra... oki
Title: Re:Dudas circunstanciales
Post by: BlySntK on June 12, 2012, 06:36:03 AM
No me aclaro con los scrolls, los tengo todos puestos en procesos individuales pero.... no me aparecen las imagenes en pantalla como deberían. Estoy mirando de jugar tanto con el ctype y el cnumber pero, no sé si estoy haciendolo bien... sinceramente... Como tampoco sé si estoy poniendo los parametros de los scrolls bien (en el sentido de poner las capas en primer plano en de fondo...)
Title: Re:Dudas circunstanciales
Post by: Erkosone on June 12, 2012, 01:46:21 PM
Bueno.. yo no soy quien para ayudarte en esto por que no he programado nada en BennuGD que use varias capas de scroll para hacer un parallax o lo que sea que quieres conseguir, pero las preguntas que deberías hacerte mas o menos son estas:


1 - El scroll tiene transparencia?
Para conseguir el efecto que quieres debes asegurarte de que estás haciendo las cosas bien, pon un putscreen de fondo e inicia un scroll, si ves la imagen del put_Screen() a través del scroll todo andará bien, como imagen para el scroll utiliza una imagen a modo de maya que contenga lineas blancas por ejemplo y todo lo demás en negro, deberías ver el fondo que pusiste con put_screen() a traves de las zonas negras.


2 - La Z de cada capa está bien en tu proyecto?
Para visualizar esto correctamente create 2 imágenes sencillas a modo de "maya" y para diferenciarlas mejor una de ellas que sea una maya mas concentrada que la otra, entonces practica en un ejemplo por separado a inicializar los 2 scrolls "si el punto 1 lo has consegido" y verifica que la maya mas densa se visualiza por detrás de la menos densa.


3 - Si has logrado los dos puntos anteriores ya tienes lo necesario para continuar con tu proyecto.
Title: Re:Dudas circunstanciales
Post by: BlySntK on June 12, 2012, 02:00:13 PM
Gracias Erko... me pondré a hacer pruebas ya mismo... A ver si logro que primeramente las Z de los scroll sean transparentes... y logo que se vayan montando cada capa sucesiva dejando ver la posterior...