Détruire les roches
Fait partie de la section Projets du Journey Godot de Coddy. Leçon 15 sur 33.
Une roche est un Area2D et une balle est un corps, donc body_entered indique à la roche quand une balle la touche. Chaque balle appartient au groupe bullets.
func _on_body_entered(body):
if body.is_in_group("bullets"):
body.queue_free()
burst()
queue_free()Supprime aussi la balle. Sinon, elle continue son vol et brise la roche derrière. burst() se trouve déjà dans rock.gd. Cette fonction projette un nuage de poussière à l’endroit où se trouvait la roche. Appelle-la avant queue_free().
Défi
MoyenDans rock.gd, connectez body_entered dans _ready. Lorsqu’un corps du groupe bullets touche le rocher, supprimez la balle, appelez burst() et supprimez le rocher.
Essayez vous-même
extends Area2D
var velocity = Vector2.ZERO
func _physics_process(delta):
position += velocity * delta
rotation += 0.5 * delta
if position.x < -30:
position.x += 700
if position.x > 670:
position.x -= 700
if position.y < -30:
position.y += 420
if position.y > 390:
position.y -= 420
# Bursts into dust where the rock is. Call it when the rock breaks.
func burst():
var dust = CPUParticles2D.new()
dust.position = position
dust.one_shot = true
dust.explosiveness = 1.0
dust.amount = 20
dust.lifetime = 0.7
dust.spread = 180.0
dust.gravity = Vector2.ZERO
dust.initial_velocity_min = 30.0
dust.initial_velocity_max = 120.0 * scale.x
dust.scale_amount_min = 2.0
dust.scale_amount_max = 5.0
dust.color = Color(0.75, 0.82, 0.95)
dust.finished.connect(dust.queue_free)
get_parent().add_child(dust)
dust.emitting = true
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Projets
2Projet : jeu de tir d’astéroïdes
Faire tourner le vaisseauMettre le moteur en marcheEntraînez-vous par vous-même : Playground Godot