Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Calcular o pulo (jogo de plataforma) da maneira certa ~>
- 1- Normalmente quando falamos velocide vertical em um jogo de plataforma, de uma forma mas simple falamos de gravidade e pulo. Normalmente fazemos da seguinte forma :
- # declaramos as variaveis para força do pulo e gravidade
- var gravity: float = 800
- var jump_force: int = -200
- # e criamos condições para as mesmas acontecerem..
- if not is_on_floor():
- velocity.y += gravity * delta
- if Input.is_action_just_pressed("ui_jump"):
- velocity.y = jump_force
- 2- Porém existe uma forma melhor de controlar a altura e tempo do pulo com base em formulas matematicas onde :
- A velocidade inicial = (2 x altura_maxima) / tempo_ate_altura_maxima
- A gravidade = -(2 x altura_maxima) / tempo_ate_altura_maxima * tempo_ate_altura_maxima
- 3- Então dessa forma fazemos as seguintes alterações nas variaveis "gravity" e "jump_force":
- var gravity: float = (100 * 2) / (0.3 * 0.3)
- var jump_force: int = -(100 * 2) / 0.3 # Onde o "100"= altura maxima em pixels e o "0.3" é o tempo até chegar la (meio segundo)
- 4- Para melhorar o nosso sistema o player leva o mesmo tempo pra subir e descer, porém é interessante que ele caia mais rapido.Para isso podemos fazer o seguinte :
- var fall_grav:float = grav * 1.5 # Criamos uma variavel para quando tiver caindo e atribuimos o valor de grav * 1.5.
- 5- Na função que aplicação da gravidade fazemos a seguinte checagem :
- if not is_on_floor():
- if velocity.y > 0: # Se velocity.y >0 então eu estou caindo,logo quero cair mais rápido
- velocity.y += fall_grav * delta
- else: # Caso contrário ,minha gravidade será normal
- velocity.y += grav * delta
- 6- Caso eu queira fazer um controle de altura de pulo onde eu posso da só um toque e pular menos do que segurar o botão,faço isso :
- if not is_on_floor():
- if velocity.y > 0 || !Input.is_action_pressed("ui_pulo"): # Só de adicionar essa condição ja resolve o que queremos
- velocity.y += fall_grav * delta
- else:
- velocity.y += grav * delta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement