Puntuación y victoria
Parte de la sección Proyectos del Journey de Godot de Coddy. Lección 20 de 36.
Una roca grande vale 20 puntos y una pequeña, 50. _on_rock_broken conoce el tamaño, así que suma los puntos y actualiza $HUD/Score.
Ganas cuando no quedan rocas. Empieza el contador en 4. Resta una por cada roca rota y suma dos cuando una grande se divide:
if rock.size == 2:
rocks_left += 2
rocks_left -= 1
if rocks_left == 0:
$HUD/Message.text = "You win!"
get_tree().paused = trueCuenta aquí las dos rocas nuevas, no en spawn_rock. spawn_rock se ejecuta al final del fotograma, así que el contador llegaría a cero antes de que existieran las dos últimas rocas pequeñas.
Las rocas, las balas y la nave son Pausable. Main es Always.
Desafío
DifícilSuma puntos por las rocas y gana cuando desaparezcan.
- En
main.gd, añadevar score = 0y muestraScore: 0. - Una roca grande rota suma 20 puntos; una pequeña, 50. Muestra la puntuación.
- Añade
var rocks_left = 4. Resta una por cada roca rota y suma dos cuando una grande se parta. Cuando llegue a 0, muestraYou win!y pausa el juego.
Pulsa «Jugar» y elimina las rocas: aparecerá You win! 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)), 2)
func spawn_rock(where, velocity, size):
var rock = ROCK.instantiate()
rock.position = where
rock.velocity = velocity
rock.size = size
rock.broken.connect(_on_rock_broken)
add_child(rock)
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)
Todas las lecciones de Proyectos
2Proyecto: Disparador de asteroides
Gira la naveEnciende el motorPractica por tu cuenta: Playground de Godot