Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: marron400 en Noviembre 03, 2014, 09:20:27 PM

Título: efecto gravedad cero
Publicado por: marron400 en Noviembre 03, 2014, 09:20:27 PM
 :GM8:

hola comunidad soy nuevo , y quisiera hacer un pregunta hacerca de juegos de naves. yo quiero crear un juego en que la nave pueda moverse y ejerce una clase de fuerza como un propulsor que mueve a la nave y  al estar en el espacio quisiera moverme para todos lados sin cambiar mi direccion ,al mismo tiempo quisiera poder disparar , todo esto con las flechas: arriva(propulcion),izquierda(rotacion izquierda),derecha(rotacion derecha)y abajo( tecla de disparo ),nose si lo postie bien ,pero detodas formas gracias y saludos
Título: Re:efecto gravedad cero
Publicado por: TheSandBoxMKG en Noviembre 03, 2014, 09:24:22 PM
Explícate mejor que no entiendo  :P
Título: Re:efecto gravedad cero
Publicado por: penumbra en Noviembre 03, 2014, 09:38:43 PM
para rotar con las flechas , por ejemplo , en el evento de la tecla flecha derecha
[gml]image_angle -= 1[/gml]

Para propulsar la nave, en el evento de la tecla flecha arriba
[gml]
speed = 8
direction = image_angle
[/gml]

y en STEP de la nave
[gml]friction = 0.1[/gml]

Para disparar, en el evento de la tecla flecha abajo tienes que hacer algo como[gml]
if (disparar)
{
     instance_create(x + lengthdir_x(32, image_angle), y + lengthdir_y(32, image_angle), obj_bala);
     disparar = 0
     alarm[0] = room_speed * 0.5
}[/gml]

Evento alarma[0] de la nave
[gml]disparar = 1[/gml]

Eso a grandes rasgos, no esperes que funcione a la primera. Seguro le faltan cosas, como declarar la variable disparar en [CREATE] de la nave. Quizás no entendí bien lo de la propulsión, sobre todo lo de gravedad cero, ya que no recuerdo un juego de naves en el que no haya gravedad 0 (de lo contrario todo "caería" hacia algún lado)
Título: Re:efecto gravedad cero
Publicado por: kostra en Noviembre 04, 2014, 10:03:53 AM
tienes una variable reservada, llamada "gravity" xd
Título: Re:efecto gravedad cero
Publicado por: marron400 en Noviembre 06, 2014, 02:21:08 AM
penumbra gracias por el codigo, espero que no te moleste pero no me sirve el comando friction porque yo le quiero dar una velocidad inicial , una velocidad maxima y una que se valla deteniendo lentamente pero que al apretar la tecla de velocidad la velocidad constante del movimiento no se agrege a la velocidad actual osea quiero que cree un aefecto de atraccion hacia la posicion que iva llendo pero al querer dar la vuelta al sentido inverso no se pare de golpe y valla en la direccion contraria asi como un rebote de pelota sino que al dar la vuelta se reste a la velocidad que ivallendo 
Título: Re:efecto gravedad cero
Publicado por: Clamud en Noviembre 06, 2014, 05:32:45 AM
Para que el movimiento se cambie lentamente puedes modificar el evento "flecha arriba" usando la función "motion_add":
[gml]
motion_add( image_angle, 1 );
if( speed > 8 ) speed = 8;
[/gml]
Título: Re:efecto gravedad cero
Publicado por: marron400 en Noviembre 08, 2014, 12:48:49 AM
Cita de: Clamud en Noviembre 06, 2014, 05:32:45 AM
Para que el movimiento se cambie lentamente puedes modificar el evento "flecha arriba" usando la función "motion_add":
[gml]
motion_add( image_angle, 1 );
if( speed > 8 ) speed = 8;
[/gml]
disculpa pero no me funciono ,lo que quiero es restar el vector no aumentarlo mira en estep tengo esto:
velocidadmax=10




if keyboard_check(vk_up) = true
{
speed += 0.09
if speed > velocidadmax {speed = velocidadmax}
}
else
{
speed -= 0.08
if speed < 0 {speed = 0}
}

y en up(arriva)esto:
direction = image_angle
Título: Re:efecto gravedad cero
Publicado por: marron400 en Noviembre 08, 2014, 01:20:09 AM
Cita de: penumbra en Noviembre 03, 2014, 09:38:43 PM
para rotar con las flechas , por ejemplo , en el evento de la tecla flecha derecha
[gml]image_angle -= 1[/gml]

Para propulsar la nave, en el evento de la tecla flecha arriba
[gml]
speed = 8
direction = image_angle
[/gml]

y en STEP de la nave
[gml]friction = 0.1[/gml]

Para disparar, en el evento de la tecla flecha abajo tienes que hacer algo como[gml]
if (disparar)
{
     instance_create(x + lengthdir_x(32, image_angle), y + lengthdir_y(32, image_angle), obj_bala);
     disparar = 0
     alarm[0] = room_speed * 0.5
}[/gml]

Evento alarma[0] de la nave
[gml]disparar = 1[/gml]

Eso a grandes rasgos, no esperes que funcione a la primera. Seguro le faltan cosas, como declarar la variable disparar en [CREATE] de la nave. Quizás no entendí bien lo de la propulsión, sobre todo lo de gravedad cero, ya que no recuerdo un juego de naves en el que no haya gravedad 0 (de lo contrario todo "caería" hacia algún lado)
porfabor respondeme amigo tu eres un maestro en codigos
Título: Re:efecto gravedad cero
Publicado por: penumbra en Noviembre 08, 2014, 02:02:48 AM
Cita de: marron400 en Noviembre 08, 2014, 12:48:49 AM
disculpa pero no me funciono ,lo que quiero es restar el vector no aumentarlo mira en estep tengo esto:

Si quieres que la nave tenga inercia, la solución más fácil es la que propuso Clamud. El que la función se llame motion_add no quiere decir que siempre se sumen los valores. Se trata de una suma de vectores en la que se considera la dirección, por lo que si te mueves en una dirección y usas la función con una dirección contraria, el resultado no será una suma, sino una resta, que es lo adecuado para hacer que la nave cambie lentamente de dirección.

Usar fricción, como lo había propuesto, es más fácil que usar esto:
{
speed -= 0.08
if speed < 0 {speed = 0}
}


El detalle más importante es saber usar adecuadamente motion_add( image_angle, 1 ); Si se usa tal cual en STEP, el efecto de inercia no se va a lograr como quieres, porque, suponiendo que te mueves a 45° y luego quieres moverte a 135°, en cuanto gires la nave, y presiones la tecla de avanzar, la inercia (que se supone te debería "arrastrar" a 45° por un tiempo) se va a perder casi de inmediato y la nave se moverá hacia la dirección dada por image_angle, por lo que motion_add( image_angle, 1) se debe llamar sólo en el momento adecuado para respetar la inercia que ya trae la nave. O de otra forma, en lugar de 1, se debería usar un valor más pequeño para la velocidad, pero en esencia el código que puso clamud es lo que debrías usar.
Título: Re:efecto gravedad cero
Publicado por: marron400 en Noviembre 09, 2014, 04:09:49 AM
Cita de: penumbra en Noviembre 08, 2014, 02:02:48 AM
Cita de: marron400 en Noviembre 08, 2014, 12:48:49 AM
disculpa pero no me funciono ,lo que quiero es restar el vector no aumentarlo mira en estep tengo esto:

Si quieres que la nave tenga inercia, la solución más fácil es la que propuso Clamud. El que la función se llame motion_add no quiere decir que siempre se sumen los valores. Se trata de una suma de vectores en la que se considera la dirección, por lo que si te mueves en una dirección y usas la función con una dirección contraria, el resultado no será una suma, sino una resta, que es lo adecuado para hacer que la nave cambie lentamente de dirección.

Usar fricción, como lo había propuesto, es más fácil que usar esto:
{
speed -= 0.08
if speed < 0 {speed = 0}
}


El detalle más importante es saber usar adecuadamente motion_add( image_angle, 1 ); Si se usa tal cual en STEP, el efecto de inercia no se va a lograr como quieres, porque, suponiendo que te mueves a 45° y luego quieres moverte a 135°, en cuanto gires la nave, y presiones la tecla de avanzar, la inercia (que se supone te debería "arrastrar" a 45° por un tiempo) se va a perder casi de inmediato y la nave se moverá hacia la dirección dada por image_angle, por lo que motion_add( image_angle, 1) se debe llamar sólo en el momento adecuado para respetar la inercia que ya trae la nave. O de otra forma, en lugar de 1, se debería usar un valor más pequeño para la velocidad, pero en esencia el código que puso clamud es lo que debrías usar.
gracias te debo mucho a ti y a clamud, em nose como se usa este foro ¿ funciona con puntos o algo parecido?, de igual forma si te sirvo para algo me lo dices