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.
Défi
DifficileFais éclater les gros rochers en deux et détruire les petits.
- Dans
rock.gd, ajoutevar size = 2et définisscale = Vector2.ONE * size * 0.5dans_ready. - Ajoute un paramètre
sizeàspawn_rock, puis définisrock.sizeavantadd_child. Les 4 premiers reçoivent la valeur2. - Ne divise les rochers que lorsque
rock.size == 2, en deux rochers de taille1.
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
2Projet : Tir aux astéroïdes
Tourner le vaisseauAllumer le moteurEntraînez-vous par vous-même : Playground Godot