Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Como fazer um dash em 8 direções Godot 4.x ~>
- 1- Primeiramente criamos 3 variáveis para o nosso dash :
- var dir_dash:Vector2 = Vector2.ZERO # A variável vai determinar a direção + força do dash ( inicialmente zerada)
- var spd_dash:int = 1000 # A variável vai determinar a velocidade que vai ser movido o player no dash
- var dash_on:bool = true # A variável vai controlar quando eu vou poder usar o dash
- #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 )
- 2- Outra coisa que tem ser feito é adicionar um Timer à cena e referencia-lo no script:
- @onready var timer_dash = $timer_dash as Timer # Esse timer vai controlar quanto tempo o dash vai durar.
- #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
- 3- Considerando que a essa altura do campeonato o player ja deve ter uma maquina de estado parecida com essa :
- func _physics_process(delta: float):
- match estado:
- "normal":
- aplica_gravidade(delta)
- controla_animacoes(direction)
- pular()
- "dashmode":
- pass
- precisamos estabelecer uma forma de sair do estado normal para o estado dash , para isso vamos adicionar o seguinte conjunto de cod:
- func _physics_process(delta: float):
- match estado:
- "normal":
- aplica_gravidade(delta)
- controla_animacoes(direction)
- pular()
- if Input.is_action_just_pressed("ui_dash"): # Se eu apertar o input de dash...
- if dash_on: # Se o dash for true...
- dir_dash = Vector2( # Aqui eu estou atribuindo o dir_dash...
- Input.get_axis("ui_esquerda","ui_direita") * spd_dash,
- Input.get_axis("ui_cima","ui_baixo") * spd_dash
- )
- if dir_dash == Vector2.ZERO: # Se eu não estiver apertando nenhum botão direcional enquanto dou o dash...
- if texture.scale.x == 1: # verifico se player esta virado para direita
- dir_dash = Vector2(float(1 * spd_dash),float(0)) # E aplico a direção do dash igual a direção do player
- elif texture.scale.x == -1: # Se estiver olhando para esquerda...
- dir_dash = Vector2(float(-1 * spd_dash),float(0)) # aplico a direção do dash igual a direção do player
- estado = "dashmode" # Após ja ter a direção que o dash vai ir posso mudar para o estado "dashmode"
- timer_dash.start() # Inicio o Timer do dash
- dash_on = false # E passo o valor de dash_on para false para não ficar dando dash infinito
- "dashmode":
- velocity = dir_dash # No estado de dashmode aplico ao meu velocity a dir_dash
- 4- Agora, precisamos conectar o sinal timeout do Timer do dash e adicionar as seguintes linhas :
- func _on_timer_dash_timeout(): # Quando o timer zerar...
- estado = "normal" # O player volta pro estado normal
- velocity = Vector2.ZERO
- # 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement