Noviembre 03, 2014, 09:20:27 PM Ultima modificación: Noviembre 03, 2014, 09:23:15 PM por marron400
 :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


#2 Noviembre 03, 2014, 09:38:43 PM Ultima modificación: Noviembre 03, 2014, 09:45:04 PM por penumbra
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)

tienes una variable reservada, llamada "gravity" xd
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

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 

#5 Noviembre 06, 2014, 05:32:45 AM Ultima modificación: Noviembre 06, 2014, 05:40:31 AM por Clamud
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]

#6 Noviembre 08, 2014, 12:48:49 AM Ultima modificación: Noviembre 08, 2014, 01:41:13 AM por marron400
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

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

#8 Noviembre 08, 2014, 02:02:48 AM Ultima modificación: Noviembre 08, 2014, 02:12:34 AM por penumbra
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.

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