Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: _-Caleb-_ en Octubre 31, 2014, 03:17:06 PM

Título: Problemas con los disparos usando el motor de físicas
Publicado por: _-Caleb-_ en Octubre 31, 2014, 03:17:06 PM
Buenas.

Estoy haciendo un juego de naves PvP, de naves con físicas (Al estilo Asterois) (Usando el motor de físicas de GMS) y tengo un problema con los disparos, no sé cómo hacer que disparen, por lo pronto rotan a la vez que la nave, ya sé que con las físicas activadas el movimiento normal no funciona en el step, así que si alguien es tan amable de comentarme qué función usar para hacer que las balas avancen en el ángulo actual de la nave estaría MUY agradecido.

Aunque creo que usando physics_apply_impulse se podría pero aún así sigo sin saber cómo hacer que dispare exactamente en el ángulo actual de la nave. Llevo varias horas planificando el proyecto sobre el papel e implementando cosas, ya veréis como luego es una chorrada.... xD

Muchas gracias.

EDITO: Por dar más datos, en la pulsaciónd e Espacio de la nave tengo un code con lo siguiente:

disparo = instance_create (x, y,bala);
with (disparo){
phy_rotation = other.phy_rotation;
}


Que es loque gira la bala, ahora me falta saber cómo hacer que avance :D

¡Saludos!
Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: Marth en Octubre 31, 2014, 03:51:32 PM
w=instance_create(x,y,bala)
w.direction=direction


Este es el truco para que el disparo salga en el sentido de la nave.
Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: _-Caleb-_ en Octubre 31, 2014, 04:02:36 PM
Cita de: Marth en Octubre 31, 2014, 03:51:32 PM
w=instance_create(x,y,bala)
w.direction=direction


Este es el truco para que el disparo salga en el sentido de la nave.

Justo venía a editar el mensaje: Se me ha encendido la bombilla por un momento, lo he hecho así y funciona:

disparo = instance_create (x, y,bala);
with (disparo)
    {
phy_rotation = Player.phy_rotation + 40;
phy_bullet = true;
physics_apply_local_impulse(0, 0, -Player.x , -Player.y);
    }


EDITO: No sé por qué he tenido que añadir ese +40 en el phy_rotation, ya que si no lo ponía la bala se iba "torcida"... igualmente no va muy fino, sugerencias?
Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: _-Caleb-_ en Noviembre 01, 2014, 08:23:57 AM
Hola.

Bueno, amplío información, os pongo un vídeo de lo que me ocurre, ver a mitad del vídeo cómo se mueven los disparos a ver si alguien me puede explicar por qué pasa esto. :)

https://www.dropbox.com/s/bjg5195q7snld6n/nave%20fisica.mp4?dl=0

El tema es que usando aceleración continua y luego poniendo un límite y tal podría hacerlo, pero me he empeñado en aprender cómo va el motor de físicas xD
Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: penumbra en Noviembre 01, 2014, 08:42:05 AM
¿Por qué has decidido usar esto?
[gml]physics_apply_local_impulse(0, 0, -Player.x , -Player.y);[/gml]
Es decir, ¿por qué usas la posición -player.x y -player.y como los valores del impulso? ¿Qué relación puede haber entre la posición del jugador y la magnitud del impulso?

Otra cosa, si las balas tienen masa, se van a ver afectadas por la gravedad, lo cual en un juego de este tipo no es típico, podrías dejar la densidad en 0 para que eso no pase.
Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: _-Caleb-_ en Noviembre 01, 2014, 09:47:53 AM
Cita de: penumbra en Noviembre 01, 2014, 08:42:05 AM
¿Por qué has decidido usar esto?
[gml]physics_apply_local_impulse(0, 0, -Player.x , -Player.y);[/gml]
Es decir, ¿por qué usas la posición -player.x y -player.y como los valores del impulso? ¿Qué relación puede haber entre la posición del jugador y la magnitud del impulso?

Otra cosa, si las balas tienen masa, se van a ver afectadas por la gravedad, lo cual en un juego de este tipo no es típico, podrías dejar la densidad en 0 para que eso no pase.

Buenas penumbra, gracias por contestar.

¿Sinceramente? No tengo mucha idea de cómo va el motor de físicas y así los disparos no sólo se crean sino que avanzan (Fue ensayo/error)  :-[

No sé, tengo la sensación de que estoy haciendo algo horriblemente mal xD

Si les pongo densidad cero las balas no se mueven, no hay gravedad (Al menos en este nivel) está tanto X como Y en 0 en el room.

Adjunto los datos de la física de la bala y de la nave actualmente:




Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: penumbra en Noviembre 01, 2014, 10:31:36 AM
OK. Con esas imágenes cambia la cosa.

A la bala dale una densidad de 0.1

Si le das valores a linear damping y angular damping, eso provoca que haya una atenuación en la velocidad de la bala, como si le pusieras fricción (no es exactamente lo mismo que la fricción). Creo que por eso las balas se comportan del modo que se ve en el vídeo. Esos valores ponlos a cero.

La fricción en 1 probablemente es mucha, intenta bajarla a 0.1

Cambia el with() a esto (debe ejecutarse en el objeto nave. me imagino que así lo tienes)
[gml]
with (disparo)
{
     phy_rotation = other.phy_rotation                //El +40 no debe ir, no sé por qué pusiste eso.
     phy_bullet = true;
     physics_apply_local_impulse(0, 0, 0 -120);
}
[/gml]

Creo que así debería funcionar, aunque no lo he probado

Título: Re:Problemas con los disparos usando el motor de físicas
Publicado por: _-Caleb-_ en Noviembre 01, 2014, 10:46:20 AM
Cita de: penumbra en Noviembre 01, 2014, 10:31:36 AM
OK. Con esas imágenes cambia la cosa.

A la bala dale una densidad de 0.1

Si le das valores a linear damping y angular damping, eso provoca que haya una atenuación en la velocidad de la bala, como si le pusieras fricción (no es exactamente lo mismo que la fricción). Creo que por eso las balas se comportan del modo que se ve en el vídeo. Esos valores ponlos a cero.

La fricción en 1 probablemente es mucha, intenta bajarla a 0.1

Cambia el with() a esto (debe ejecutarse en el objeto nave. me imagino que así lo tienes)
[gml]
with (disparo)
{
     phy_rotation = other.phy_rotation                //El +40 no debe ir, no sé por qué pusiste eso.
     phy_bullet = true;
     physics_apply_local_impulse(0, 0, 0 -120);
}
[/gml]

Creo que así debería funcionar, aunque no lo he probado

Es el rozamiento,no? Ahora he caído! :D

Tu código va genial, no sé, con mi código tenía que poner +40 (Supongo que porque tenía el rozamiento y por eo se iban de lado las balas)

Bueno, mil gracias por esto Penumbra! Si sigo teniendo dudas sobre el tema de las físicas volveré a preguntar aquí :)

De nuevo mil gracias y Saludos!