Tirer sur les rochers
Fait partie de la section Projets du Journey Godot de Coddy. Leçon 17 sur 36.
Un rocher est une Area2D et une balle est un corps, donc body_entered indique au rocher quand une balle le percute. Toutes les balles appartiennent 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 sa trajectoire et brise le rocher derrière. burst() se trouve déjà dans rock.gd. Cette fonction projette un nuage de poussière à l’endroit où se trouvait le rocher. Appelle-la avant queue_free().
Défi
MoyenFais éclater les rochers avec les balles.
- Dans
rock.gd, connectebody_enteredà_on_body_entereddans_ready. - Lorsque le corps appartient au groupe
bullets, supprime la balle, appelleburst()et supprime le rocher.
Appuie sur « Jouer » et tire sur un rocher : il éclate en poussière. Puis appuie sur « Vérifier ».
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
Toutes les leçons de Projets
Entraînez-vous par vous-même : Playground Godot