Rocas grandes y pequeñas
Parte de la sección Proyectos del Journey de Godot de Coddy. Lección 19 de 36.
Solo deben dividirse las rocas grandes. Asigna a cada roca un size, 2 para las grandes y 1 para las pequeñas, y úsalo para dibujarla en rock.gd's _ready: scale = Vector2.ONE * size * 0.5.
spawn_rock también recibe el tamaño. Asigna rock.size antes de add_child(rock): _ready se ejecuta dentro de add_child, así que asignar el tamaño después llega demasiado tarde para la escala.
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)Una roca pequeña simplemente se rompe.
Desafío
DifícilHaz que las rocas grandes se dividan y las pequeñas se rompan.
- En
rock.gd, añadevar size = 2y establecescale = Vector2.ONE * size * 0.5en_ready. - Pasa un
sizeaspawn_rocky establecerock.sizeantes deadd_child. Las primeras 4 reciben2. - Divídelas solo cuando
rock.size == 2, en dos de tamaño1.
Pulsa «Jugar» y dispara: las rocas grandes se dividen y las pequeñas se rompen. Después, pulsa «Comprobar».
Pruébalo tú mismo
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)
Todas las lecciones de Proyectos
2Proyecto: Disparador de asteroides
Gira la naveEnciende el motorPractica por tu cuenta: Playground de Godot