Menu
CoddyTech

Treibende Felsen

Teil des Abschnitts Projekte der Godot-Journey von Coddy. Lektion 14 von 33.

Als Nächstes kommen die Felsen. Ein Felsen ist eine Szene, rock.tscn, und rock.gd bewegt ihn. Er treibt mit seiner velocity dahin, dreht sich langsam und wird wie das Schiff auf der anderen Bildschirmseite wieder angezeigt. Ein Felsen ist groß, deshalb wird er bei -30 und 670 statt bei 0 und 640 wieder angezeigt. So verlässt er den Bildschirm vollständig, bevor er zurückkommt.

main.gd erstellt Felsen mit einer Funktion, sodass das Erzeugen an einer Stelle gebündelt ist:

func spawn_rock(where, velocity):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	add_child(rock)

Rufe sie in _ready mit einer Schleife viermal auf. Jeder Felsen erhält eine zufällige Position am oberen Rand und eine zufällige Geschwindigkeit:

spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)))
challenge icon

Aufgabe

Schwer
  1. Füge in rock.gd _physics_process hinzu. Bewege den Felsen um velocity * delta und addiere 0.5 * delta zu rotation.
  2. Lass den Felsen am Bildschirmrand wieder erscheinen: Liegt er bei x außerhalb von -30 oder 670, bewege ihn um 700 in die andere Richtung. Liegt er bei y außerhalb von -30 oder 390, bewege ihn um 420.
  3. Füge in main.gd const ROCK = preload("res://rock.tscn") und die Funktion spawn_rock(where, velocity) hinzu. Erzeuge wie gezeigt in _ready 4 Felsen.

Probier es selbst

extends Area2D

var velocity = Vector2.ZERO

# Bursts into dust where the rock is. Call it when the rock breaks.
func burst():
	var dust = CPUParticles2D.new()
	dust.position = position
	dust.one_shot = true
	dust.explosiveness = 1.0
	dust.amount = 20
	dust.lifetime = 0.7
	dust.spread = 180.0
	dust.gravity = Vector2.ZERO
	dust.initial_velocity_min = 30.0
	dust.initial_velocity_max = 120.0 * scale.x
	dust.scale_amount_min = 2.0
	dust.scale_amount_max = 5.0
	dust.color = Color(0.75, 0.82, 0.95)
	dust.finished.connect(dust.queue_free)
	get_parent().add_child(dust)
	dust.emitting = true
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Projekte

Übe selbstständig: Godot-Playground