Advertisement
Zunesha

Como fazer um dash em 8 direções Godot 4.x

Nov 16th, 2023
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Como fazer um dash em 8 direções Godot 4.x ~>
  2.  
  3. 1- Primeiramente criamos 3 variáveis para o nosso dash :
  4.  
  5. var dir_dash:Vector2 = Vector2.ZERO        # A variável vai determinar a direção + força do dash ( inicialmente zerada)
  6. var spd_dash:int = 1000                    # A variável vai determinar a velocidade que vai ser movido o player no dash
  7. var dash_on:bool = true                    # A variável vai controlar quando eu vou poder usar o dash
  8.  
  9. #Obs -  No exemplo em questão eu quero que no chão eu possa dar quantos dash quiser, mas no ar apenas 1 ( jogo de plataforma )
  10.  
  11. 2- Outra coisa que tem ser feito é adicionar um Timer à cena e referencia-lo no script:
  12.  
  13. @onready var timer_dash = $timer_dash as Timer   # Esse timer vai controlar quanto tempo o dash vai durar.
  14.  
  15. #Obs - No Timer o wait timer eu coloquei em 0.2 e marquei a opção de  One Shot para o timer não ficar reiniciando sozinho
  16.  
  17. 3- Considerando que a essa altura do campeonato o player ja deve ter uma maquina de estado parecida com essa :
  18.  
  19. func _physics_process(delta: float):
  20.     match estado:
  21.         "normal":
  22.             aplica_gravidade(delta)
  23.             controla_animacoes(direction)
  24.             pular()
  25.  
  26.         "dashmode":
  27.             pass
  28.  
  29. precisamos estabelecer uma forma de sair do estado normal para o estado dash , para isso vamos adicionar o seguinte conjunto de cod:
  30.  
  31. func _physics_process(delta: float):
  32.     match estado:
  33.         "normal":
  34.             aplica_gravidade(delta)
  35.             controla_animacoes(direction)
  36.             pular()
  37.  
  38.             if Input.is_action_just_pressed("ui_dash"):                               # Se eu apertar o input de dash...
  39.                 if dash_on:                                                           # Se o dash for true...
  40.                     dir_dash = Vector2(                                               # Aqui eu estou atribuindo o dir_dash...
  41.                         Input.get_axis("ui_esquerda","ui_direita") * spd_dash,
  42.                         Input.get_axis("ui_cima","ui_baixo") * spd_dash
  43.                     )
  44.                    
  45.                     if dir_dash == Vector2.ZERO:     # Se eu não estiver apertando nenhum botão direcional enquanto dou o dash...                          
  46.                         if texture.scale.x == 1:                                # verifico se player esta virado para direita
  47.                             dir_dash = Vector2(float(1 * spd_dash),float(0))    # E aplico a direção do dash igual a direção do player
  48.                         elif texture.scale.x == -1:                             # Se estiver olhando para esquerda...
  49.                             dir_dash = Vector2(float(-1 * spd_dash),float(0))   # aplico a direção do dash igual a direção do player
  50.                    
  51.                     estado = "dashmode"        # Após ja ter a direção que o dash vai ir posso mudar para o estado "dashmode"                          
  52.                     timer_dash.start()         # Inicio o Timer do dash
  53.                     dash_on = false            # E passo o valor de dash_on para false para não ficar dando dash infinito  
  54.  
  55.         "dashmode":
  56.             velocity = dir_dash       # No estado de dashmode aplico ao meu velocity a dir_dash
  57.  
  58. 4- Agora, precisamos conectar o sinal timeout do Timer do dash e adicionar as seguintes linhas :
  59.  
  60. func _on_timer_dash_timeout():   # Quando o timer zerar...
  61.     estado = "normal"            # O player volta pro estado normal
  62.     velocity = Vector2.ZERO      
  63. # Obs É importante zerar o velocity após acabar o tempo do dash para garantir que o player não dê um pulinho após acabar o dash
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement