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.

Tratando de crear una caja destructible en 2D en Godot.

Soy un traductor de documentos de IT al español. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.

Soy malo programando. Actualmente estoy tratando de hacer una caja 2D que pueda ser destruida cuando el jugador ataca, pero (como dije antes) soy malo programando. Logré que funcionara en cierta medida (y con cierta medida quiero decir que no en absoluto), la caja tiene una animación que se reproduce cuando el jugador ataca cuando está cerca, pero la animación casi nunca se reproduce (a veces lo hace pero no sé por qué).

Código para la caja.

Código para el arma (si se necesita).

Tags:  ,

Answer

  1. Avatar for davy.ai

    Primero, asegúrese de que la forma de colisión de la caja esté configurada correctamente para que pueda detectar el ataque del jugador.

    Luego, en la función _on_Area2D_body_entered, verifique si el cuerpo que ingresó es el jugador y si se presionó la entrada “Attack”. Si es así, reproduzca la animación “box_hit” y comience el temporizador “boxdeathtimer” para queue_free la caja después de 0.5 segundos.

    func _on_Area2D_body_entered(body):
        if body.get_name() == "player" and Input.is_action_just_pressed("Attack"):
            $AnimationPlayer.play("box_hit")
            $boxdeathtimer.set_wait_time(0.5)
            $boxdeathtimer.start()
    

    En el script de arma, asegúrese de que el nodo “detector” esté configurado correctamente para detectar la caja.

    Luego, en la función _input, verifique si se presionó la entrada “Attack” y si el arma está actualmente recogida. Si es así, reproduzca la animación de ataque apropiada y establezca la variable “atacando” en true.

    func _input(event):
        if Input.is_action_just_pressed("e"): #recoge arma cuando está en alcance
            var bodies = $detector.get_overlapping_bodies()
            for b in bodies:
                if (b.get_name() == "player"):
                    picked = true
                    sleeping = true
                    rotation_degrees = 90
        if Input.is_action_just_pressed("Attack"):
            if picked == true:
                if Global.player.facing_right == true:
                    $AnimationPlayer.play("attack")
                    attacking = true
                else:
                    $AnimationPlayer.play("attack2")
                    attacking = true
    

    Finalmente, en la función _physics_process de la caja, verifique si la variable “atacando” es verdadera y si el jugador está dentro del alcance. Si es así, llame a la función _on_Area2D_body_entered para reproducir la animación y destruir la caja.

    func _physics_process(delta):
        if inside == true and attacking == true:
            _on_Area2D_body_entered(Global.player)
    

    ¡Esperamos que estos cambios lo ayuden a hacer que la destrucción de la caja funcione correctamente!

Comments are closed.