Lernpfad:Scratch für Fortgeschrittene/Figuren klonen

Aus HG Wiki
Zur Navigation springen Zur Suche springen

Hat man in einem Projekt mehrere Figuren mit denselben Skripten, aber unterschiedlichem Aussehen, oder eine Figur, die mehrmals auf der Bühne erscheinen soll, dann kopiert man einfach die Figur. So einfach ist das.

Allerdings hat dieses Vorgehen viele Nachteile:

  • Was, wenn es eine Änderung im Skript geben soll? Dann muss die Änderung mehrmals in jeder kopierten Figur vorgenommen werden.
  • Oder wenn es sehr viele Kopien der Figur geben muss? Dann verliert man unter all den gleich aussehenden Figuren schnell den Überblick.
  • Oder wenn vorher nicht bekannt ist, wie viele Kopien der Figur man braucht?

Für solche Fälle gibt es in Scratch die Möglichkeit Klone einer Figur zu erstellen.

Klone erstellen und programmieren

erzeuge Klon von [mir selbst v]
Ereugt bei der Ausführung einen exakten Klon von der aktuellen Figur. Allerdings laufen noch keine Skripte. Der Klon existiert, solange das Projekt gestartet ist. Sobald es gestoppt wird (Scratch stop.png), werden alle erstellten Klone wieder gelöscht.
Es können auch Klone von anderen Figuren erstellt werden. Zum Beispiel könnte ein Baum im Herbst Klone seiner Blätter erzeugen, die langsam zu Boden gleiten.
Wenn ich als Klon entstehe
Wird ausgelöst, wenn ein Klon mit erzeuge Klon von [mir selbst v] erstellt wurde.

Klone löschen

lösche diesen Klon
Löscht den aktuellen Klon und stoppt alle seine Skripte.

Eigenschaften von Klonen

Ein Klon sieht zunächst genauso aus wie die Figur. Es hat auch dieselben Skripte und verhält sich daher genauso.Um das Verhalten der Klone zu variieren gibt es verschiedene Möglichkeiten. Dazu wird mit der Wenn ich als Klon entstehe Anweisung ein Skript erstellt, dass für jeden Klon leicht anders abläuft.

Zufälliges Verhalten

Die einfachste Möglichkeit, das Verhalten zu variieren, ist es, mit dem Zufall zu arbeiten. In der Kategorie Operatoren findet sich die Anweisung Zufallszahl von () bis (), mit der Zufallszahlen in einem festgelegten Bereich erzeugt werden können.

Zum Beispiel könnte der Scratch-Katze in einem neuen Projekt das folgende Skript einprogrammiert werden:

Wenn die grüne Flagge angeklickt
wiederhole (10) mal
  erzeuge Klon von [mir selbst v]
  warte (1) Sek.
end

Wenn ich als Klon entstehe
setze x auf (Zufallszahl von (-200) bis (200))
setze y auf (Zufallszahl von (-180) bis (180))
setze [Farbe v]-Effekt auf (Zufallszahl von (10) bis (100))

Wir nun die grüne Flagge (Scratch Flagge.png) angeklickt, dann entstehen nach und nach zehn Klone der Katze, die sich zufällig auf der Bühne verteilen und eine zufällige Farbe annehmen.

Scratch Klone1.gif

Verhalten abhängig von Bedingungen

Eine andere Möglichkeit ist es, das Verhalten von Klonen abhängig von bestimmten Bedingungen zu verändern. Zum Beispiel könnte man den Anschein einer Bewegung erzeugen, indem man Figuren (zum Beispiel Bäume) im Vor- und Hintergrund der Bühne bewegt. Bäume weiter im Hintergrund müssten sich dann langsamer bewegen, als solche im Vordergrund. Die Geschwindigkeit der Bewegung einer Baumfigur wird also von seiner Position auf der Bühne festgelegt.

Scratch Klone2.gif

Die Baumfigur positioniert sich zufällig auf der Bühne und erzeugt einen Klon von sich selber. Jeder Klon bewegt sich dann Schrittweise nach links. Die Schrittweite wird durch die y-Position des Klons bestimmt. Ist die y-Position größer als -120, dann bewegt sich der Baum etwas langsamer, sonst schneller.

Das Skript der Klone sieht wie folgt aus:

Wenn ich als Klon entstehe
zeige dich
wiederhole bis <wird [Rand v] berührt?>
  falls <(y-Position) > [-120]> dann
    gehe (-8)er-Schritt
  sonst
    gehe (-16)er-Schritt
  end
end
lösche diesen Klon

Variablen nutzen

Eine dritte Möglichkeit, das Verhalten von Klonen zu beeinflussen, sind Variablen. Wie im Schritt Figuren animieren beschrieben sind Variablen Speicher für Informationen, in denen jeweils ein Wert abgelegt und später wieder abgerufen werden kann. Dort ist auch der Unterschied zwischen globalen und lokalen Variablen erklärt.

Das Besondere an lokalen Variablen ist, dass sie für jeden Klon einen anderen Wert speichern können.

Das folgende Beispiel verdeutlicht dies. Es enthält eine Figur, die zehn verschiedene Kostüme hat. Jedes Kostüm stellt eine andere Ziffer von 0 bis 9 dar. Außerdem hat die Figur eine lokale Variable (nummer). Beim Klick auf die grüne Flagge (Scratch Flagge.png) wird nun im Abstand von 0,5 Sekunden jeweils die Variable mit ändere [nummer v] um (1) um eins erhöht, sowie ein Klon erzeugt. Die Klone wiederum gleiten innerhalb von einer Sekunde zu einer Position, die sich aus der (nummer) berechnet und wechseln dann zur Kostüm mit der in (nummer) gespeicherten Nummer. Beachte, dass der Kostümwechsel erst nach einer Sekunde stattfindet, wenn schon längst der nächste Klon erzeugt wurde und damit auch die (nummer) schon wieder hochgezählt wurde. Die Klone haben sich aber den Wert bei ihrer Erzeugung gemerkt und wechseln so zum richtigen Kostüm.

Das Skript sieht wie folgt aus:

Wenn die grüne Flagge angeklickt
setze [nummer v] auf (0)
gehe zu x:(-200) y:(0)
wiederhole (10) mal
  ändere [nummer v] um (1)
  erzeuge Klon von [mir selbst v]
  warte (0.5) Sek.
end

Wenn ich als Klon entstehe
gleite in (1) Sek. zu x:((-200)+((nummer)*(40))) y:(0)
wechsle zu Kostüm (nummer)
Beispiel für die Verwendung von lokalen Variablen zur Steuerung von Klonen.