Febrero 20, 2010, 06:48:14 AM Ultima modificación: Febrero 21, 2010, 02:28:53 AM por Shadow Blade
Primero que nada saludarlos a todos en esta comunidad  :)

Comento que, tras alrededor de algo m?s de 2 a?os, decido con un viejo colega y amigo ingresar al asunto de las plataformas, estamos dando los primeros pininos (el medio ocio...) con Game Maker 8 pudiendo hacer complacientemente algunos movimientos b?sicos como lo es caminar hacia ambos sentidos, agacharse y saltar as? como la creaci?n de un room (sin emplear los paths a?n)

Entonces, nos encontramos ante un contratiempo, podemos hacer sin problemas que nuestro personaje se agache mirando hacia la derecha, PERO si el mismo est? viendo hacia la izquierda, al agacharse el sprite sigue siendo el mismo tal cual como si viese a la derecha, es decir, no tenemos idea de como incorporar la acci?n de que se muestre el "crounch left" si el personaje mira hacia la izquierda, adem?s de eso tenemos unos problemas con los saltos, todo esto con la esperanza de que nos puedan dar alg?n tipo de soporte:

-El salto vertical es correcto al igual que el cambio de sprite, pero al tocar suelo, se queda en la posici?n de salto en lugar de "volver" a la posici?n del stand. (no sabemos como incorporar el que vuelva al stand)

-Estamos liados para hacer que el salto hacia la izquierda (sea vertical ? con desplazamiento horizontal) el personaje vea hacia esa direcci?n ya que al saltar, el sprite es el mismo que para el salto a la dercha (es decir, NO sabemos como incorporar el sprite correcto)

-Si primero saltamos verticalmente y DESPUES movemos el "pad" izquierda ? derecha en el aire, el personaje efectivamente se desplaza... pero la animaci?n es la de caminata, dando la impresi?n de caminar en el aire, ?c?mo logramos que se mantenga el sprite del salto?

Espero que puedan ayudar a un par de novatos emprendedores al GM que se han enredado ac?, les dejo un copy/paste de la informaci?n del "object" que es el personaje.

CitarInformation about object: character

Sprite: stand_right
Solid: true
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Step Event:
if relative position (0,1) is collision free for Only solid objects
     set the gravity to 0.5 in direction 270
else
     set the gravity to 0 in direction 270
if vspeed is larger than 10
     set variable vspeed to 10

Collision Event with object floor:
move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0

Collision Event with object wall:
move in direction direction at most 10 till a contact with solid objects
if hspeed is larger than 0
     set variable hspeed to 0

Keyboard Event for <Space> Key:
if relative position (0,1) gives a collision with Only solid objects
     set the vertical speed relative to -7
set the sprite to jump with subimage 0 and speed 1

Key Press Event for <Left> Key:
if relative position (-4,0) is collision free for Only solid objects
     start moving in directions 000100000 with speed set relative to 7
set the sprite to walk_left with subimage 0 and speed 1
jump relative to position (-1,0)

Key Press Event for <Right> Key:
if relative position (4,0) is collision free for Only solid objects
     start moving in directions 000001000 with speed set relative to 7
set the sprite to walk_right with subimage 0 and speed 1
jump relative to position (1,0)

Key Press Event for <Down> Key:
set the sprite to crouch with subimage 0 and speed 1

Key Release Event for <Left> Key:
if relative position (-5,0) is collision free for Only solid objects
     set the sprite to stand_left with subimage 0 and speed 1
start moving in directions 000010000 with speed set to 0

Key Release Event for <Right> Key:
if relative position (5,0) is collision free for Only solid objects
     set the sprite to stand_right with subimage 0 and speed 1
start moving in directions 000010000 with speed set to 0

Key Release Event for <Down> Key:
set the sprite to stand_right with subimage 0 and speed 1

Saludos.

aaah muchas letras

tienes que usar condicionales

y una variable de direccion quizas

ev create

direccion=0 //0 espara derecjha 180 para izq

ev presionar tecla

direccion=0 //o 180 segun sea ya te especifique

ev step

if direccion=0{sprite_index=charader}
if direccion=180{sprite_index=charaizq}

// agregales las variables de salto de agachar etc para especificar mas sprites y es todo

Se agradece, ha servido de manera parcial, ?por qu? digo "parcial"? sucede que tenemos nuevos (y algunos viejos) problemas que m?s bien, no hayamos como colocar una condicional.

-Si el personaje salta vertical, y en el aire presionamos DOWN, el personaje se agacha, ?c?mo podemos evitar esto?

-Similar al de arriba, cuando el personaje cae, se queda en la posici?n del "jump" al tocar suelo y no cambia por el "stand" hasta que le hacemos caminar.

-Igualmente, si saltamos verticalmente, y en el aire presionamos una direcci?n (izquierda ? derecha) el personaje efectivamente se desplaza, pero la animaci?n es la del caminar en el piso, dando sensaci?n de caminar en el aire, ?c?mo podemos poner la animaci?n de "ca?da"?

-Pudimos poner con ?xito (evidente) que el personaje de un segundo salto en el aire, pero no encontramos la manera de cambiar la animaci?n del salto inicial por el de, por ejemplo, una pirueta. (Me explico, salto normal, segundo salto = pirueta)

Se que son muchas interrogantes quiz?s f?ciles de responder para alguien avanzado en esto (e incluso quiz?s puedan resultar molestas) pero dado nuestra novatez, resulta complicado dar con la forma de solucionarlo. Saludos.

Condicionales, por ej., le pones un if.
If there is not a collision at x,y point {lo q qres q pase}
Traducci?n: Si no hay nada debajo, que no realize la acci?n, ya que tiene que estar en el suelo para agacharse
Dificil de explicar. Vamos a ser un poco mas graficos

Algo asi. Relativo indica que checkea 1 debajo del personaje, y no la posici?n 0,1 absoluta en el room
En los demas pones bloques if preguntando cosas que ayuden a determinar
cu?ndo realizar la acci?n. No es algo que se pueda ense?ar en uno o dos comment, es
cuesti?n de ingenio. Saber hacer las preguntas adecuadas en el programa para que
la acci?n se realize s?lo cuando las condiciones se cumplan. Si no entiendes esto
deberias buscar un ejemplo de plataformas en d&d para orientarte mejor
Bueno, ese es mi consejo, espero que te sirva, suerte  :)




Bueno, de momento hemos solucionado, gracias a la respuesta, el que no se agache en el aire, aunque hemos estado empleando GML (no domado a?n, pero ah? la llevamos) sin embargo tenemos un problema con el "flip" y es que, usando el "xscale=-1" efectivamente aplica flip horizontal al voltear a la izquierda, pero no entendemos por que se reaparece lejos del punto inicial en vez de solamente voltearse, mirad:





El "flip" es demasiado... ?alguna sugerencia de donde metimos la pata? Si quitamos el "menos" en el xscale, el personaje hace "moonwalker" pero definitivamente no reaparece lejos del punto inicial, ?ste es el code que pusimos para el "KeyBoard Left":

Citarif place_free (x-3,y) x-=3;
image_speed=0.30
sprite_index=walk
image_xscale=-1

if place_free(x,y+1) {sprite_index=jump}
else {sprite_index=walk}

Y lo mismo es para el right que, igualmente, si se est? a la izquierda y presionamos derecha, el personaje reaparece lejos como se mostr? en las im?genes.

Citarif place_free (x+3,y) x+=3;
image_speed=0.30
sprite_index=walk
image_xscale=1

if place_free(x,y+1) {sprite_index=jump}
else {sprite_index=walk}

Ve a las opciones del sprite y dale a centrar el origen

Suerte  XD




Totally 0WN3D!!

?Gracias! Se nota al tiro que estamos s?per novatos en esto, se agradece mucho la ayuda brindada.  XD

Veo que no hiciste la vida del boss. Predigo que lo vas a preguntar m?s adelante asi q
para ahorrar tiempo.. Necesitan ayuda con eso??




Pues de hecho si... lo iba a preguntar en su momento, pasa que de momento batallamos con el personaje principal  XD no pezcamos como poner una condici?n que nos permita NO desplazarnos cuando el personaje est? agachado, as? como poner un doble salto y que la animaci?n cambie por una pirueta ( y es que si pusimos doble salto... pero lo hace infinidad de veces XD ) Todo esto via GML en su mayoria, adem?s de hacer sus ataques (con espada, de pie, agachado y saltando)

Con el boss... la idea es que haya un di?logo previo al llegar con todos antes mostrando un "WARNING!" (t?pico de los Megaman X) y al terminar el di?logo, se mostrara su barra de vida (del boss) (simplemente que se muestre, no que se vaya llenando, adem?s creemos que hacer que la barra se llene ser?a m?s trabajoso)

Citar(simplemente que se muestre, no que se vaya llenando, adem?s creemos que hacer que la barra se llene ser?a m?s trabajoso)
No ser?a tan trabajoso, pero como quieras  XD
Para la vida del boss van a necesitar guardarla en una variable, preferiblemente global, ya que
a estas se puede acceder desde cualquier objeto. La vida puede tener cualquier valor m?ximo, siendo 0
el m?nimo. F?cilmente puedes disminuir o aumentar la vida mediante global.vida-=1 o global.vida+=1, 1 o
el valor que desees. Luego la dibujas donde desees con draw_rectangle(x,y,x+global.vida/100*var,y+32,1)
Donde var va a ser la vida m?xima del jefe. Tambi?n puedes cambiar el /100 por otra cifra a tu gusto.
Recuerda que con cifras mas grandes achicas la barra (no el total de la vida) y con cifras m?s chicas
estiras la barra. Luego les ayudar? con el resto si quieren. Pero ser?a mejor por msn, asi no llenamos
la comunidad de posts innecesarios. Suerte con el proyecto, por ahora se ve bien  XD