Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: zHeMaa en Febrero 02, 2015, 08:40:41 AM

Título: Fisicas [SOLUCIONADO]
Publicado por: zHeMaa en Febrero 02, 2015, 08:40:41 AM
Hola buenas, he añadido físicas a mi juego con el objetivo de hacer colisiones aparte de que también me sirve para otras cosas como para mover objetos, y hacer que cuando un enemigo me ataque me empuje unas casillas para la dirección contraria de donde este dicho enemigo.

He estado probando bastante rato, he leído la web de Yoyo sobre las físicas y no lo consigo.. básicamente quiero que cuando objeto "a", por ejemplo, colisione con objeto "b", objeto "b" sea empujado unas casillas. Supongo que se podrá hacer pero nunca había tocado esto de las físicas y ando super perdido.

Gracias de antemano! :)
Título: Re:Fisicas
Publicado por: penumbra en Febrero 02, 2015, 08:56:14 AM
Cita de: zHeMaa en Febrero 02, 2015, 08:40:41 AM
He estado probando bastante rato, he leído la web de Yoyo sobre las físicas y no lo consigo.. básicamente quiero que cuando objeto "a", por ejemplo, colisione con objeto "b", objeto "b" sea empujado unas casillas.
¿Casillas? Si los objetos se mueven por grid o valores fijos, es mejor no usar físicas. No es por desanimar, pero no todas las mecánicas son adecuadas para tener física.

Si deseas seguir usando física, al menos da detalles, porque eso de "no lo consigo" nos deja sin idea, no indica qué pasa o cómo se comporta actualmente el juego, qué código y eventos estás usando, cuáles son las propiedades de los objetos, cómo estás manejando la colisión, etc...


Título: Re:Fisicas
Publicado por: zHeMaa en Febrero 02, 2015, 10:24:33 AM
Cita de: penumbra en Febrero 02, 2015, 08:56:14 AM
Cita de: zHeMaa en Febrero 02, 2015, 08:40:41 AM
He estado probando bastante rato, he leído la web de Yoyo sobre las físicas y no lo consigo.. básicamente quiero que cuando objeto "a", por ejemplo, colisione con objeto "b", objeto "b" sea empujado unas casillas.
¿Casillas? Si los objetos se mueven por grid o valores fijos, es mejor no usar físicas. No es por desanimar, pero no todas las mecánicas son adecuadas para tener física.

Si deseas seguir usando física, al menos da detalles, porque eso de "no lo consigo" nos deja sin idea, no indica qué pasa o cómo se comporta actualmente el juego, qué código y eventos estás usando, cuáles son las propiedades de los objetos, cómo estás manejando la colisión, etc...

A "unas casillas", me refiero a que cuando colisione en vez de mover (o arrastrar) el objeto como hace ahora, quiero que lo empuje. No se si me explico..
Te dejo un vídeo donde en el minuto 1 aprox. en Zelda: the minish cap salen unos enemigos y se ve claramente como al atacarle los empuja.
https://www.youtube.com/watch?v=3vutqLqQz7M (https://www.youtube.com/watch?v=3vutqLqQz7M)

No estoy usando códigos, simplemente marque las casillas de las físicas y las active en la room y como colisión tengo que por ejemplo el objeto nombrado anteriormente "a" colisione con "b".

Haber.. básicamente he echo esto de las físicas por esto de que quiero que cuando un enemigo ataque a otro, al colisionar que lo empuje en dirección contraria a donde este dicho enemigo, si se puede hacer sin físicas muchísimo mejor ya que tengo que cambiar muchísimo código con esto de las físicas..

Pero estuve viendo bastantes vídeos en ingles sobre físicas (ya que en español apenas habían..) y sinceramente no es que entienda mucho ingles, y lo que hacia básicamente era copiandolo del vídeo, ya que escucharlo me era inútil. Y yo pensaba que con físicas podía conseguir lo dicho anteriormente de empujar, pero si crees que es mejor hacerlo sin físicas me harías un grandisimo favor..

Gracias por responder!
Un saludo :)
Título: Re:Fisicas
Publicado por: penumbra en Febrero 02, 2015, 11:31:57 AM
El efecto de retroceso se puede hacer con física o sin fisica, pero si ya tienes el juego avanzado al estilo normal, creo que no conviene meter físicas.

Hay varias cosas que se deben tener en cuenta, pero desconozco cómo las manejes. Se supone que si el retroceso dura medio segundo, durante ese medio segundo, el jugador no debería moverse, es decir, se debería impedir su movimiento con las teclas o lo que uses para moverlo. Por ejemplo[gml]
if (!retroceso)
{
   //código para mover al jugador en las 4 posiciones MEDIANTE TECLAS, JOYSTIC, ETC
}[/gml]

Tampoco sé cómo manejas el ataque, qué evento usas para detectar que has golpeado a un enemigo, si el taque lo hace un objeto arma adicional al jugador o el mismo sprite del jugador cambia a un sprite de ataque con espada incluída. Así que voy a suponer que de algún modo sabes el ID de instancia del enemigo al que se ataca, y que ésta se guarda en la variable id_enemigo.

Cuando el jugador contacte con la espada a un enemigo:[gml]
if (!retroceso)
{
     alarm[11] = 0.5 * room_speed      //medio segundo
     retroceso = 1                             //El retroceso se activa
     direction = point_direction(x, y, id_enemigo.x, id_enemigo.y) * -1    //El -1 invierte la dirección, para que sea opuesta al enemigo (o en su lugar, sumar + 180)
     speed = 3
     friction = 0.1                                       //Esto no sé qué tal funcione, se puede modificar o suprimir si no te convence
}[/gml]

ALARM[11][gml]
retroceso = 0                //Terminar retroceso
speed = 0                     //Anular speed (si es que friction no alcanzó a hacerla 0 antes)
[/gml]

Es la idea básica, le falta por pulir por ejemplo, que si atacas a un enemigo desde una posición no muy frontal, el retroceso puede seguir una trayectoria diagonal, habría que mejorar eso para que sólo pueda ser en 4 direcciones (se usaría una división sencilla para "redondear" la dirección a 4 posibles ángulos)
Título: Re:Fisicas
Publicado por: zHeMaa en Febrero 04, 2015, 11:33:48 AM
Esta perfecto penumbra, muchísimas gracias! :)

PD: Lo siento por responder tan tarde, llevaba unos días ocupadísimo..