Menu
CoddyTech

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().

challenge icon

Défi

Moyen

Fais éclater les rochers avec les balles.

  1. Dans rock.gd, connecte body_entered à _on_body_entered dans _ready.
  2. Lorsque le corps appartient au groupe bullets, supprime la balle, appelle burst() 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