Menu
CoddyTech

Gros et petits rochers

Fait partie de la section Projets du Journey Godot de Coddy. Leçon 19 sur 36.

Seuls les gros rochers doivent se diviser. Attribue une size à chaque rocher, 2 pour les gros et 1 pour les petits, et utilise-la pour le dessiner dans rock.gd avec _ready : scale = Vector2.ONE * size * 0.5.

spawn_rock prend également la taille. Définis rock.size avant add_child(rock) : _ready s’exécute dans add_child, donc définir la taille après est trop tard pour l’échelle.

func _on_rock_broken(rock):
	if rock.size == 2:
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5, 1)
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5, 1)

Un petit rocher se brise simplement.

challenge icon

Défi

Difficile

Fais éclater les gros rochers en deux et détruire les petits.

  1. Dans rock.gd, ajoute var size = 2 et définis scale = Vector2.ONE * size * 0.5 dans _ready.
  2. Ajoute un paramètre size à spawn_rock, puis définis rock.size avant add_child. Les 4 premiers reçoivent la valeur 2.
  3. Ne divise les rochers que lorsque rock.size == 2, en deux rochers de taille 1.

Appuie sur « Jouer » et tire : les gros rochers se divisent, les petits se brisent. Puis appuie sur « Vérifier ».

Essayez vous-même

extends Node2D

const ROCK = preload("res://rock.tscn")

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)))

func spawn_rock(where, velocity):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	rock.broken.connect(_on_rock_broken)
	add_child(rock)

func _on_rock_broken(rock):
	spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5)
	spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5)

Toutes les leçons de Projets

Entraînez-vous par vous-même : Playground Godot