Dudas circunstanciales

Started by BlySntK, May 23, 2012, 01:42:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BlySntK

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?
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

gecko

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.
Torres Baldi Studio
http://torresbaldi.com

BlySntK

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.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

gecko

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.
Torres Baldi Studio
http://torresbaldi.com

BlySntK

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
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

gecko

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;
Torres Baldi Studio
http://torresbaldi.com

gecko

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.
Torres Baldi Studio
http://torresbaldi.com

BlySntK

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...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Erkosone

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.

BlySntK

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
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

gecko

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
Torres Baldi Studio
http://torresbaldi.com

BlySntK

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...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

BlySntK

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.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

gecko

creo que llego un poquito tarde, pero prepare un ejemplito con el tema de las coordenadas y la sombra...
Torres Baldi Studio
http://torresbaldi.com

BlySntK

#14
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...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)