Noviembre 08, 2012, 08:23:54 PM Ultima modificación: Noviembre 08, 2012, 08:30:55 PM por pepecajon
Hola a todos,

Estoy haciendo algunas pruebas de juegos de plataformas, y me gustaría que cuando mi personaje toque el suelo tras un salto reproduzca un sprite de toque con el suelo (ponga las manos en el suelo) y luego recupere la posición habitual (el sprite habitual).

Se me ocurre que al saltar cambia una variable salto a 1.

A la colisión con suelo chequee la variable salto, si esta en 0 (no está saltando, no haga nada) pero si está en 1 (acaba de volver de un salto), cambie sprite por el sprite de tocar el suelo, pero no se como hacer para enlazar este con el habitual una vez se haya reproducido, ¿un timer quizá?.

Gracias a todos  ;)

Depende, si la colisión es verdadera todo el tiempo en el que se está en el suelo la forma es fácil: Mientras que haya colision dibujar con las manos en el piso, o si no dibujar caminando normalmente

Lo digo porque hay muchos ejemplos en los cuales al tocar el piso se coloca gravity=0, es decir que no colisionará más con el piso ya que no cae, si no que "vuela bien bajito"

O si no te podés fijar si uno está tocando el piso y hay una velocidad vertical alta, ya que se supone que cuando uno está caminando no tiene casi vspeed (velocidad vertical)
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Muchas gracias, entonces ¿recomiendas que en el plataformas se utilize una gravedad para el objeto en todo momento y que colisione realmente con el suelo o que vaya modificando la gravedad según chequee si hay objeto solido debajo o no?.

Gracias de nuevo

No, dejá todo como está, lo que quiero decir es que la forma de resolver el problema depende de cómo hiciste tu juego :-[. ¿No me podés pasar el evento de colisión del jugador con el piso?
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


#4 Noviembre 08, 2012, 09:29:30 PM Ultima modificación: Noviembre 08, 2012, 10:29:06 PM por penumbra
Más sencillo que un timer o agregar una variable extra, es usar el evento "Animation end", que se encuentra dentro de la categoría "otros". Ahí pondrías algo como

if sprite_index == animación_de_salto
{
    image_index = 0                                           //Esto para asegurarse que la animación nueva comience desde el principio
    sprite_index = animacion_de_aterrizaje
}


Obviamente, tu juego debe estar bien sincronizado para que la animación de salto termine justo al tocar el suelo. Yo tambien manejo una animación de aterrizaje en mi proyecto, aunque no uso animation end, pero el resultado es similar.

En mi juego. en ciertos cambios de animación, la nueva animación empieza en el mismo número de subimagen donde se quedó la animación anterior, lo cual no es lo que quiero,  por eso el uso de image_index = 0

Yo veo mejor que uses una alarma para darle un tiempo al sprite de las manos tocando el suelo para que se vea. Animation end se activa cuando un sprite termina su animacion, y si esta es de una sola imagen se veria solo durante un step.
Entonces saltas, cuando toques el suelo cambias al sprite de las manos tocando el suelo y activas una alarma, eso donde detectas la colision con el suelo.
[gml]alarm[0]=50 //por dar un ejemplo[/gml]
y en el codigo de la alarm[0] pones que vuelva al sprite normal de caminar:
[gml]sprite_index=sprite_caminar //o como se llame XD[/gml]

Espero que se entienda  :-[
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.