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.
Défi
Difficile- Dans
rock.gd, ajoutezvar size = 2etsignal broken(rock). Définissez l’échelle à partir desizedans_ready. Émettezbrokenavecselflorsqu’une balle touche le rocher. - Dans
main.gd, faites en sorte quespawn_rock(where, velocity, size)définissesizedu rocher et connecte son signalbroken. Les 4 premiers rochers ont une taille de 2. - 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 de0.8et de-0.8, puis multipliées par1.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)
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