Advertisement
Zunesha

Como fazer uma plataforma que cai

Nov 5th, 2023 (edited)
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Como fazer uma plataforma que cai ~>
  2.  
  3. 1- Vamos a estrutura da cena da plataforma:
  4.     1.1 - Criamos como nó raiz um "AnimatableBody2D" para ser o corpo da plataforma
  5.     1.2 - Adicionamos um "Sprite2D" para adicionar uma textura
  6.     1.3 - Um "CollisionShape2D" para dar forma a colisão
  7.     1.4 - Um "AnimationPlayer" para criar a animação de shake da plataforma
  8.     1.5 - Uma "Area2D" para criarmos a area de checagem de colisão com o player
  9.     1.6 - Como filho da "Area2D", obviamente criaremos outro "CollisionShape2D"
  10.     1.7 - Para finalizar, um "Timer" setado em 1 segundo e com o "OneShot" marcado
  11.  
  12.  
  13. 2 - Vamos ao script da plataforma:
  14.  
  15. extends AnimatableBody2D
  16.  
  17. @onready var animation_player = $AnimationPlayer       # Referencia do AnimationPlayer
  18. @onready var timer = $Timer                            # Referência do Timer
  19. @onready var collision_shape_2d = $CollisionShape2D    # Referencia do colisor que limita a área da plataforma
  20. @onready var collision = $AreaDeEfeito/collision       # Referência do colisor da área que checa a colisão com o player
  21.  
  22. @onready var posicao_inicial = global_position         # Referência da posição inicial da plataforma (importante)
  23.  
  24. var estado = "normal"                                  # Uma variavel para controlar os estados da plataforma (normla/caindo/spawnando)
  25.  
  26. func _physics_process(delta):
  27.    
  28.     match estado:
  29.        
  30.         "normal":                                   # Não tem necessidade de escrever nada nesse estado
  31.             pass
  32.         "caindo":                                   # Quando a plataforma estiver no estado de caindo ela cair e reduzir a opacidade
  33.             position.y += 5
  34.             modulate.a -=.05
  35.         "respawnando":                              # Ja no estado de respawnando ela é setada na posição inicial e aumenta a opacidade
  36.             position = posicao_inicial
  37.             modulate.a += .05
  38.            
  39.             if modulate.a >= 1:                     # Assim que a plataforma volta a ficar totalmente visível ela vai pro estado normal
  40.                 collision_shape_2d.disabled = false             # Habilitando colisor
  41.                 collision.disabled = false                      # Habilitando colisor
  42.                 estado = "normal"
  43.  
  44.  
  45. func _on_area_de_efeito_body_entered(body):                    # Esse é um método por meio do sinal da Area2D (body_entered)
  46.  
  47.     var player_velocity_y = get_node("../Player").velocity.y   # Criando a variável para pegar o valor de velocity.y do objeto Player
  48.  
  49.     if body.name == "Player" and player_velocity_y >=0:    # Verificando se o body que está colidindo é o Player e se o velocity.y >= 0
  50.         animation_player.play("shake")                     # Então ele toca a animação de shake
  51.         await animation_player.animation_finished          # Espera a animação acabar.....
  52.         timer.start()                                      # Starta o Alarm que determina por quando tempo a plataforma vai cair
  53.         estado = "caindo"                                  # Muda o estado da plataforma para caindo
  54.  
  55. func _on_timer_timeout():                                  # Esse é um método por meio do sinal do Timer (timeout)
  56.     estado = "respawnando"                                 # Assim que o timer zerar a plataforma vai pro estado de respawnando
  57.     collision_shape_2d.disabled = true                     # Desabilitando o colisor da área da plataforma
  58.     collision.disabled = true                              # Desabilitando o colisor da área que triggar a plataforma
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement