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!
w=instance_create(x,y,bala)
w.direction=direction
Este es el truco para que el disparo salga en el sentido de la nave.
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?
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
¿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:
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!