Hola Visitante

Disparar hacia el jugador

  • 2 Respuestas
  • 66 Vistas
*

Juanki

  • *
  • 14
  • +0/-0
  • Siempre aprendiendo
    • Ver Perfil
Disparar hacia el jugador
« en: 21 de Noviembre del 2018, 23:13 »
Hola

Me topé con un pequeño problema de matemáticas y ángulos  :o . Tengo al jugador, que es un KinematicBody2D, al enemigo, que es otro KinematicBody2D y éste, a su vez, dispara una bala que es otro KinematicBody2D.

El caso es que quiero hacer que la bala salga del enemigo en dirección al jugador. Obtengo sin problemas la posición del jugado, pero no logro hacer que vaya hacia su posición, no quiero que lo siga, solo que salga en línea recta hacia la posición que ocupe el jugador en el momento del disparo.

A ver si me dais una ayudita  ;D

Un saludo
Realiza las preguntas de forma clara, en caso de error aporta el mismo y el código que crees da el error.

Procura escribir correctamente y sin faltas de ortografía

*

Juanki

  • *
  • 14
  • +0/-0
  • Siempre aprendiendo
    • Ver Perfil
Re:Disparar hacia el jugador
« Respuesta #1 en: 03 de Diciembre del 2018, 15:05 »
Hola

Al final lo solucioné, buscando otras cosas me encontré con un trozo de código que hacía eso, mover un objeto hacia donde estaba el jugador, la diferencia es que usaba un RigidBody2D, en el cual usaba el método set_axis_velocity, cambié mi objeto a RigidBody2D y usándolo de la siguiente forma: set_axis_velocity((p_jugador - global_position) * VEL_BALA * get_process_delta_time()), siendo p_jugador la posición donde está el jugador y global_position la posición del enemigo que dispara, funciona.

El problema es que al ser un cuerpo que le afecta la física del juego, pues se ve afectado por la gravedad y da un efecto "raro" para una bala. Así que apliqué esa forma a un KinematicBody2D y me quedó así:

Código: [Seleccionar]
extends KinematicBody2D

const VEL = 500
var direccion = Vector2()

func _physics_process(delta):
    move_local_y(direccion.y * VEL * delta)
    move_local_x(direccion.x * VEL * delta)

func _on_VisibilityNotifier2D_screen_exited():
    queue_free()

func setDireccion(dir):
    direccion = dir.normalized()

Y para llamarlo, cuando instancio la bala, pues le doy una dirección:

Código: [Seleccionar]
n_bala.setDireccion(p_jugador - global_position)
Un saludo
Realiza las preguntas de forma clara, en caso de error aporta el mismo y el código que crees da el error.

Procura escribir correctamente y sin faltas de ortografía

*

César León

  • *
  • 34
  • +13/-0
  • Para la soledad esta el recuerdo de su sonrisa.
    • Ver Perfil
    • Indie Libre
Re:Disparar hacia el jugador
« Respuesta #2 en: 05 de Diciembre del 2018, 01:11 »
Muchas gracias por compartir la solución con nosotros. Perdona que no me fije para responder, hoy voy a hacer algo parecido y te paso el código para que compares :p.