Octubre 31, 2014, 03:17:06 PM Ultima modificación: Octubre 31, 2014, 03:43:51 PM por _-Caleb-_
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!
Visita mi proyecto: Space Cadet

w=instance_create(x,y,bala)
w.direction=direction


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

#2 Octubre 31, 2014, 04:02:36 PM Ultima modificación: Octubre 31, 2014, 05:08:52 PM por _-Caleb-_
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?
Visita mi proyecto: Space Cadet

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
Visita mi proyecto: Space Cadet

#4 Noviembre 01, 2014, 08:42:05 AM Ultima modificación: Noviembre 01, 2014, 09:09:21 AM por penumbra
¿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.

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:




Visita mi proyecto: Space Cadet

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


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!
Visita mi proyecto: Space Cadet