Advertisement
Zunesha

Calcular o pulo (jogo de plataforma) da maneira certa

Nov 14th, 2023 (edited)
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Calcular o pulo (jogo de plataforma) da maneira certa ~>
  2.  
  3. 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 :
  4.  
  5. # declaramos as variaveis para força do pulo e gravidade
  6. var gravity: float = 800
  7. var jump_force: int = -200
  8.  
  9. # e criamos condições para as mesmas acontecerem..
  10. if not is_on_floor():
  11.     velocity.y += gravity * delta
  12.  
  13. if Input.is_action_just_pressed("ui_jump"):
  14.     velocity.y = jump_force
  15.  
  16. 2- Porém existe uma forma melhor de controlar a altura e tempo do pulo com base em  formulas matematicas onde :
  17.  
  18. A velocidade inicial =  (2 x altura_maxima) / tempo_ate_altura_maxima
  19.  
  20. A gravidade = -(2 x altura_maxima) / tempo_ate_altura_maxima * tempo_ate_altura_maxima
  21.  
  22. 3- Então dessa forma fazemos as seguintes alterações nas variaveis "gravity" e "jump_force":
  23.  
  24. var gravity: float = (100 * 2) / (0.3 * 0.3)
  25. 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)
  26.  
  27.  
  28. 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 :
  29.  
  30. var fall_grav:float  = grav * 1.5      # Criamos uma variavel para quando tiver caindo e atribuimos o valor de grav * 1.5.
  31.  
  32. 5- Na função que aplicação da gravidade fazemos a seguinte checagem :
  33.  
  34. if not is_on_floor():
  35.     if velocity.y > 0:                     # Se velocity.y >0 então eu estou caindo,logo quero cair mais rápido
  36.         velocity.y +=  fall_grav * delta
  37.     else:                                  # Caso contrário ,minha gravidade será normal
  38.         velocity.y +=  grav * delta
  39.  
  40. 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 :
  41.  
  42. if not is_on_floor():
  43.     if velocity.y > 0 || !Input.is_action_pressed("ui_pulo"):   # Só de adicionar essa condição ja resolve o que queremos
  44.         velocity.y +=  fall_grav * delta
  45.     else:
  46.         velocity.y +=  grav * delta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement