Menu
CoddyTech

Fragmenter les roches

Fait partie de la section Projets du Journey Godot de Coddy. Leçon 16 sur 33.

Un gros rocher devrait se diviser en deux petits rochers. Donne à chaque rocher une size : 2 pour un gros et 1 pour un petit. Dans rock.gd, dans _ready, définis scale = Vector2.ONE * size * 0.5.

Le rocher signale qu’il s’est brisé avec signal broken(rock) et broken.emit(self). self désigne le rocher. spawn_rock prend maintenant une taille et connecte le signal :

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)

Le signal arrive pendant que Godot vérifie quelles zones se touchent. L’ajout d’une zone arrête alors le jeu avec le message Can't change this state while flushing queries. call_deferred exécute l’appel à la fin de la frame, lorsque cela ne présente aucun risque.

challenge icon

Défi

Difficile
  1. Dans rock.gd, ajoutez var size = 2 et signal broken(rock). Définissez l’échelle à partir de size dans _ready. Émettez broken avec self lorsqu’une balle touche le rocher.
  2. Dans main.gd, faites en sorte que spawn_rock(where, velocity, size) définisse size du rocher et connecte son signal broken. Les 4 premiers rochers ont une taille de 2.
  3. Lorsqu’un rocher de taille 2 se brise, faites apparaître à cet endroit deux rochers de taille 1 avec call_deferred. Leurs vitesses sont celles de l’ancien rocher, tournées de 0.8 et de -0.8, puis multipliées par 1.5.

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
	add_child(rock)
quiz iconTestez-vous

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

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