es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problemas de animación del enemigo en Godot.

He creado un enemigo para mi juego RPG 2D en Godot, pero utilicé AnimationPlayer y no sé cómo hacer que mi enemigo me siga con las animaciones correctas.

onready var sprite = $AnimationPlayer
onready var stats = $Stats
onready var playerDetectionZone = $PlayerDetectionZone


func _physics_process(delta):
    knockback = knockback.move_toward(Vector2.ZERO, FRICTION * delta)
    knockback = move_and_slide(knockback)
    match state:
        IDLE:
            velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta)
            seek_player()
        WANDER:
            pass
        CHASE:
            var player = playerDetectionZone.player
            if player != null:
                var direction = (player.global_position - global_position).normalized()
                velocity = velocity.move_toward(direction * MAX_SPEED, ACCELERATION * delta)

    velocity = move_and_slide(velocity)

func seek_player():
    if playerDetectionZone.can_see_player():
        state = CHASE


func _on_Hurtbox_area_entered(area):
    stats.health -= area.damage
    knockback = area.knockback_vector * 65


func _on_Stats_no_health():
    queue_free()
    var enemyDeathEffect = EnemyDeathEffect.instance()
    get_parent().add_child(enemyDeathEffect)
    enemyDeathEffect.global_position = global_position
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer que tu enemigo te siga con las animaciones correctas, deberás agregar una nueva animación a tu nodo AnimationPlayer que corresponda al movimiento del enemigo hacia el jugador.

    A continuación, dentro de tu código, deberás llamar a la nueva animación cuando se detecte al jugador y el estado esté configurado como CHASE. Para hacer esto, modifica la sección CHASE de tu función _physics_process para incluir el siguiente código:

    if player != null:
        var direction = (player.global_position - global_position).normalized()
        velocity = velocity.move_toward(direction * MAX_SPEED, ACCELERATION * delta)
        sprite.play("chase") #agrega esta línea para reproducir la animación "chase"
    

    Este código hará que el enemigo se mueva hacia el jugador con la animación correcta reproduciéndose. Puedes ajustar la velocidad de la animación y la velocidad de movimiento a tu gusto. ¡Buena suerte con tu juego!

Comments are closed.