Aus Das deutschsprachige Scratch-Wiki
ID's: Jeder Klon eine andere Aufgabe
Einstieg
Jeder hat wahrscheinlich schon mal versucht ein wenig mit Klonen zu arbeiten und so ziemlich jeder hat schon festgestellt, dass jeder Klon das gleiche Skript ausführt, aber Klone in Scratch können noch viel mehr. In diesem Artikel lernst du gewisse Eigenschaften von Klonen kennen und lernst diese zu nutzen. Wenn du allgemeines über Klone wissen willst, dann schau dir den Artikel Klonen an.
Klone: Vererbung und Kommunikation
Klone spielen in vielen Projekten eine wichtige Rolle. Es gibt ein Klone-Limit von 300 Klonen in Scratch damit die Projekte nicht zu sehr laggen/huckeln. Ganz wichtig ist, dass Klone den gesamten Skripte/Kostüme/Klänge -Bereich seiner Originalfigur. Folgendes Beispiel:
Wenn die grüne Flagge angeklickt erzeuge Klon von [mir selbst v] warte (1) sekunden sende [Start v]an alle Wenn ich als Klon entstehe gehe zu x: (100) y: (0) Wenn ich [Start v] empfange sage [Hallo] lösche diesen Klon
Wenn du dieses Skript schreibst, wirst du beim Ausführen bemerken, dass auch der Klon "Hallo" sagt. Woran ligt das? Der Klon hat auch die Skripte übernommen weswegen er auch Nachrichten erhält. Um dies zu vermeiden kann man folgendes machen.
Wenn die grüne Flagge angeklickt setze [clone? v] auf (1) //Eine lokale Variable erzeuge Klon von [mir selbst v] setze [clone? v] auf (0) warte (1) sekunden sende [Start v]an alle Wenn ich als Klon entstehe gehe zu x: (100) y: (0) Wenn ich [Start v] empfange if <(clone?) = (0)> then sage [Hallo] ende
Wenn du das Programm jetzt ausführst wirst du sehen, dass der Klon nichts sagt. Wieso? Der Klon übernimmt auch die lokalen Variablen[1] der Originalfigur. Die übernommenen lokalen Variablen gelten dann auch nur für den Klon. Wir setzen die Variable "clone?" auf 1. Der Klon übernimmt diese Variable mit dem Wert1, dann wird sie nur für die Originalfigur auf 0 gesetzt, sodass der Klon immer noch den Wert 1 hat. Wir bauen dann einen falls <> dann
-Block ein der erkennt ob diese Variable 0 ist. Bei den Klonen bleibt sie 1 und somit wird dieses Skript nicht ausgeführt. So können wir auch anfangen IDs[2]
IDs
Ein ID ist die Identität eines Objekts[3]. Diese ID bestimmt was der Klon machen soll.
Skript:
(ID) //Diese Variable steht für die ID des Klons, sie ist lokal Wenn die grüne Flagge angeklickt setze Klone :: custom sage [Ich bin die Originalfigur!] für (3) Sekunden Definiere setze Klone //Ohne Bildschirmaktualisierung laufen lassen setze [ID v] auf [0] repeat (4) ändere [ID v] um (1) erzeuge Klon von [mir selbst v] end Wenn ich als Klon entstehe falls <(ID) = [1]> , dann gehe zu x: (-100) y: (100) sage [Ich bin Klon 1!] für (3) Sekunden sonst falls <(ID) = [2]> , dann gehe zu x: (100) y: (100) sage [Ich bin Klon 2!] für (3) Sekunden sonst falls <(ID) = [3]> , dann gehe zu x: (-100) y: (-100) sage [Ich bin Klon 3!] für (3) Sekunden sonst falls <(ID) = [4]> , dann gehe zu x: (100) y: (-100) sage [Ich bin Klon 4!] für (3) Sekunden ende ende ende ende lösche diesen Klon
Wenn du das Programm jetzt ausführst wirst du bemerken, dass die Klone sich anordnen und sagen welcher Klon sie sind. Jedes Mal, wenn ein Klon erzeugt wird, wird die lokale Variable ID größer. Der Erste Klon übernimmt die Variable ID mit dem Wert 1, der Zweite mit 2... Der Klon nimmt die Änderung der Variable bei der Originalfigur nicht wahr, da er seine eigene hat und die der Originalfigur nicht für ihn gilt. So kann man einige Projekte machen wo man nicht so viele Figuren möchte. In meinem Intro habe ich nur eine Figur in welcher Klone erzeugt werden welche alle eine andere ID haben. So lässt sich einiges, was man sehr oft braucht, einfach in vielen Projekten einfügen.
Projektbeispiel
Hier ein Beispiel für Verwendung von IDs. Diese Methode wurde in folgendem Intro genutzt. Es gibt auch viele andere Projekt in denen dieses Konzept genutzt wird.
Schau' dir dieses Projekt auf der Scratch-Webseite an...
Abschied
Ich hoffe, dass du mit diesem Tutorial was anfangen konntest und einiges gelernt hast. Vies Spaß und viel Glück für die Zukunft!