Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Como fazer uma plataforma que cai ~>
- 1- Vamos a estrutura da cena da plataforma:
- 1.1 - Criamos como nó raiz um "AnimatableBody2D" para ser o corpo da plataforma
- 1.2 - Adicionamos um "Sprite2D" para adicionar uma textura
- 1.3 - Um "CollisionShape2D" para dar forma a colisão
- 1.4 - Um "AnimationPlayer" para criar a animação de shake da plataforma
- 1.5 - Uma "Area2D" para criarmos a area de checagem de colisão com o player
- 1.6 - Como filho da "Area2D", obviamente criaremos outro "CollisionShape2D"
- 1.7 - Para finalizar, um "Timer" setado em 1 segundo e com o "OneShot" marcado
- 2 - Vamos ao script da plataforma:
- extends AnimatableBody2D
- @onready var animation_player = $AnimationPlayer # Referencia do AnimationPlayer
- @onready var timer = $Timer # Referência do Timer
- @onready var collision_shape_2d = $CollisionShape2D # Referencia do colisor que limita a área da plataforma
- @onready var collision = $AreaDeEfeito/collision # Referência do colisor da área que checa a colisão com o player
- @onready var posicao_inicial = global_position # Referência da posição inicial da plataforma (importante)
- var estado = "normal" # Uma variavel para controlar os estados da plataforma (normla/caindo/spawnando)
- func _physics_process(delta):
- match estado:
- "normal": # Não tem necessidade de escrever nada nesse estado
- pass
- "caindo": # Quando a plataforma estiver no estado de caindo ela cair e reduzir a opacidade
- position.y += 5
- modulate.a -=.05
- "respawnando": # Ja no estado de respawnando ela é setada na posição inicial e aumenta a opacidade
- position = posicao_inicial
- modulate.a += .05
- if modulate.a >= 1: # Assim que a plataforma volta a ficar totalmente visível ela vai pro estado normal
- collision_shape_2d.disabled = false # Habilitando colisor
- collision.disabled = false # Habilitando colisor
- estado = "normal"
- func _on_area_de_efeito_body_entered(body): # Esse é um método por meio do sinal da Area2D (body_entered)
- var player_velocity_y = get_node("../Player").velocity.y # Criando a variável para pegar o valor de velocity.y do objeto Player
- if body.name == "Player" and player_velocity_y >=0: # Verificando se o body que está colidindo é o Player e se o velocity.y >= 0
- animation_player.play("shake") # Então ele toca a animação de shake
- await animation_player.animation_finished # Espera a animação acabar.....
- timer.start() # Starta o Alarm que determina por quando tempo a plataforma vai cair
- estado = "caindo" # Muda o estado da plataforma para caindo
- func _on_timer_timeout(): # Esse é um método por meio do sinal do Timer (timeout)
- estado = "respawnando" # Assim que o timer zerar a plataforma vai pro estado de respawnando
- collision_shape_2d.disabled = true # Desabilitando o colisor da área da plataforma
- collision.disabled = true # Desabilitando o colisor da área que triggar a plataforma
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement