AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-22610973

olibutler's questions

Martin Hope
olibutler
Asked: 2023-09-22 07:56:10 +0800 CST

Animações substituindo minha animação de ataque em Godot 4?

  • 5

Esta é minha primeira vez programando com Godot e estou tentando incluir uma animação de ataque de espada. No entanto, outras animações, como pular, ficar ocioso ou caminhar, estão substituindo a animação da espada.

Tentei usar a função await para esperar até que a animação da espada terminasse e depois definir a variável 'attacking' como falsa. Isso apenas reproduz o primeiro quadro da animação da espada e depois é substituído por outra animação. Estou usando um player de animação com o nome 'anim' para reproduzir essas animações, agradeceria se alguém pudesse ajudar com isso, pois tenho muito pouca experiência com godot. Abaixo você encontra meu código completo para o player:

extends CharacterBody2D

const normalspeed = 400.0
const JUMP_VELOCITY = -600.0
var jump_count = 0
var dashing = false
var attacking = false
var dash_count = 0
var stamina = 100
var game_running = true
var totaldashcount = 0
var player_moving = false
var frontflipping = false
var health = 100

const cooldown=preload("res://Scripts/Cooldown.gd")

@onready var dash_cooldown=cooldown.new(2)

const dashspeed = 2500
const dashlength = 0.15

@onready var dash = $Dash

var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") * 1.7

@onready var anim = get_node("AnimationPlayer")


func _physics_process(delta):
    
    player_moving = false
    attacking = false
    dashing = false
    
    $/root/World/UI.update_stamina()
    $/root/World/UI.stamina_value(stamina)
    if stamina != 0.9:
        #print(stamina)
        $/root/World/UI.stamina_value(stamina)
    
    dash_cooldown.tick(delta)
    
    if Input.is_action_just_pressed("Dash") and stamina >= 100:
        if dash_count == 0:
            if velocity.x != 0:
                if attacking == false:
                    anim.play("Dash")
                dashing = true
                dash_count += 1
                totaldashcount += 1
                player_moving = true
                #$/root/World/UI.stamina_value(0)
            dash.start_dash(dashlength)
            dashing = true
            #$/root/World/UI.stamina_value(0)
            if velocity.x != 0:
                if attacking == false:
                    anim.play("Dash")
                dashing = true
                dash_count += 1
                totaldashcount += 1
                player_moving = true
                #$/root/World/UI.stamina_value(0)
            $/root/World/UI.update_stamina()
            stamina = 0     
        
    var speed = dashspeed if dash.is_dashing() else normalspeed
    
    if velocity.x != 0:
        player_moving = true
    else:
        player_moving = false
    
    # Add the gravity.
    if not is_on_floor():
        velocity.y += gravity * delta
    elif is_on_floor():
        velocity.y = 0
        jump_count = 0
        dash_count = 0
        
    if Input.is_action_just_pressed("ui_up") and is_on_floor() or Input.is_action_just_pressed("w") and is_on_floor():
        velocity.y = JUMP_VELOCITY
        if attacking == false:
            anim.play("Jump")
    
    var direction_letter = Input.get_axis("a", "d")
    var direction_arrow = Input.get_axis("ui_left", "ui_right")
    
    if direction_letter == -1:
        get_node("AnimatedSprite2D").flip_h = true
    elif direction_letter == 1:
        get_node("AnimatedSprite2D").flip_h = false
    if direction_arrow == -1:
        get_node("AnimatedSprite2D").flip_h = true
    elif direction_arrow == 1:
        get_node("AnimatedSprite2D").flip_h = false
        
    #WASD
    if direction_letter:
        velocity.x = direction_letter * speed
        if velocity.y == 0 and not dash.is_dashing() and velocity.x != 0:
            if attacking == false:
                anim.play("Walking")
    
    #ARROW KEYS MOVEMENT
    elif direction_arrow:
        velocity.x = direction_arrow * speed
        if velocity.y == 0 and not dash.is_dashing() and velocity.x != 0:
            if attacking == false:
                anim.play("Walking")
    else:
        velocity.x = move_toward(velocity.x, 0, speed)
        if velocity.y == 0:
            if attacking == false:
                anim.play("Idle")
            
    if velocity.y > 400 and dashing == true:
        if frontflipping == false:
            if not is_on_floor():
                if attacking == false:
                    anim.play("Fall")
    elif velocity.y > 100 and dashing == false:
        if frontflipping == false:
            if not is_on_floor():
                if attacking == false:
                    anim.play("Fall")       
        
    if velocity.y != 0 and Input.is_action_just_pressed("ui_up") or Input.is_action_just_pressed("w"):
        if jump_count == 0 or jump_count == 1:
            jump_count += 1
            velocity.y = JUMP_VELOCITY
            if jump_count == 2:
                if attacking == false:
                    anim.play("Frontflip")
                frontflipping = true

    if Input.is_action_just_pressed("ui_down") or Input.is_action_just_pressed("s"):
        $Area2D/CollisionShape2D.disabled = false
        attacking = true
        anim.current_animation = "Sword Attack"
    else:
        attacking = false
        $Area2D/CollisionShape2D.disabled = true
        
    print(attacking)
    move_and_slide()

func stamina_value_player(value):
    stamina = value
 
func _on_animation_player_animation_finished(anim_name):
    frontflipping = false


func _on_sword_hit_area_entered(area):
    if area.is_in_group("Ghost_Hitbox"):
        area.death()


func _on_area_2d_body_entered(body):
    if body.is_in_group("Hit"):
        body.take_damage()
    else:
        pass
godot
  • 1 respostas
  • 14 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve