Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Determinar posición a seguir por la bala usando el motor de físicas de GMS  (Leído 1315 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Buenas.

Otra pregunta, esto me está costando un poquito, quizás por mi ignorancia a la hora de usar físicas.

Tengo varios scripts preparados para que se ejecuten cuando las naves NPC estén a X de, por ejemplo, los asteroides. Para que les disparen y tal.

Vale, si no usara el motor de físicas sería bastante sencillo de usar... pero como lo estoy usando, ¿cómo puedo hacer algo similar a move_towards? ¿Hay alguna función para esto?

En este caso queiro que cuando el NPC X llegue cerca de un determinado tipo de asteroide dispare al asteroide.

Lo otro que se me ocurre es que se dispare hacia adelante PERO tampoco sé encarar la nave NPC a los asteroides ya que salen en ángulos y velocidades random (Al igual que los asteroides) :)

En fin, gracias por la ayuda :)

¡Saludos!


Visita mi proyecto: Space Cadet
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


elviskelley

  • Visitante
El problema de tu pregunta es el no especificar que clase de juegos es... Es decir es un shooter de naves con tiros etc... Pero, es vista cenital, isometrica, es 3D. que es...

 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
El problema de tu pregunta es el no especificar que clase de juegos es... Es decir es un shooter de naves con tiros etc... Pero, es vista cenital, isometrica, es 3D. que es...

Cierto, soy algo desastre explicándome, sorry.

A ver, mi juego es (O será, espero...) un sandbox espacial y demás, con movimiento libre (No es un shooter puro y duro)

Para que me entiendas, te pongo un pequeño vídeo de muestra porque como ya he dicho, me explico fatal :S

https://www.dropbox.com/s/04lmx903yjuvt65/galactic.mp4?dl=0

EDITO: Algunas naves tendrán "torretas" que apuntarán "solas", una vez que tenga esto hecho (Para que puedan romper los asteroides y/o defenderse) ya me pondré con alguna rutina de "combate" o algo... de momento esto es lo que necesito, ya sabes, paso a paso :)
« última modificación: Noviembre 10, 2014, 06:50:02 pm por _-Caleb-_ »

Visita mi proyecto: Space Cadet
 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
¿Nadie?  :-X

Visita mi proyecto: Space Cadet
 


Desconectado Clamud

Hola. Para hacer algo similar a move_towards_point se me ocurren dos métodos; uno sería aplicando una fuerza como lo que escrïbí en este tema: http://www.comunidadgm.org/preguntas-y-respuestas/mover-objeto-con-el-mouse-en-room-fisica-resuelto/, y otra forma sería modificar directamente las variables de velocidad en el sistema de físicas como en el código que sigue:
rapidez = valor; //se asigna un valor a la rapidez
distancia = point_distance( x,y, obj_asteroide.x, obj_asteroide.y );
if( distancia < rapidez ) rapidez = distancia; //para no pasarse del punto

angulo = point_direction( x,y, obj_asteroide.x, obj_asteroide.y );
phy_speed_x = lengthdir_x( fuerza, angulo ); //cuando la distancia sea cero
phy_speed_y = lengthdir_y( fuerza, angulo ); //la rapidez será cero
Puedes cambiar phy_speed por phy_linear_velocity si quieres indicar la velocidad en metros por segundo en vez de pixeles por step.
El efecto que se consigue es diferente en los dos métodos; al aplicar una fuerza el cambio de velocidad es gradual, pero calcular la velocidad a la que se moverá la nave y posicionarla en un punto específico es difícil; al usar el segundo método el cambio de velocidad es instantáneo, pero en algunos casos el movimiento no es suave.
También puedes cambiar los parámetros del if para que la nave se pare a cierta distancia.

Para encarar la nave con el asteroide debes comparar el ángulo de la nave con el ángulo de la linea que va desde la nave al asteroide, es decir, comparar image_angle con el ángulo obtenido en el código anterior (también se puede usar phy_rotation pero es en dirección contraria):
giro = angulo - image_angle;
if( giro > 180 ) giro -= 360;
if( giro <= 180 ) giro += 360;
Gracias a los ifs se obtiene un valor que es mayor a -180 y menor o igual a 180, para que siempre se haga el giro mas corto posible (el giro más largo es media vuelta, o sea 180 grados).
Aquí también se pueden emplear dos métodos, uno es aplicar una fuerza con physics_apply_torque, y el otro es modificar la variable phy_angular_velocity. A continuación está un ejemplo del segundo método:
rapidez_angular = valor;
if( abs(giro) > rapidez_angular ) phy_angular_velocity = rapidez_angular * sign(giro);
else phy_angular_velocity = giro;
Los métodos para hacer el giro tienen mas o menos los mismos pros y contras que en el movimiento lineal.

Las balas deben recibir un impulso en la misma dirección o ángulo que la nave.

Eso sería el movimiento básico, espero que se entienda. Si quieres hacer que la nave tenga torretas automáticas, determinar el ángulo de disparo sería similar a lo de arriba, pero tal vez se tenga que restringir el ángulo dependiendo del ángulo de la nave.
Hasta luego.

 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Epas Gracias Clamud, he estado adelantando otras partes de mi proyecto, me dejo esto para más adelante y lo anoto en el roadmap, que estoy con el sistema de mercado y es... digámoslo así.. divertido :-)

Saludos!

Visita mi proyecto: Space Cadet