Aus Das deutschsprachige Scratch-Wiki
(Weitergeleitet von Block-Workarounds)
![]() |
Dieser Artikel (oder Abschnitt) ist noch sehr kurz (oder unvollständig!). Hilf mit, ihn ausführlicher zu gestalten, indem du Informationen, Bildmaterial oder Texte hinzufügst. |
Dieser Artikel umfasst eine Liste von Block-Workarounds, also Alternativen zu Scratch-Blöcken, die die gleiche oder eine ähnliche Auswirkung wie das Original haben und mit den vorhandenen Blöcken definiert werden können.
Bewegung
drehe dich () um () Grad
drehe dich nach rechts um (15) Grad drehe dich nach links um (15) Grad
Das Drehen und die Richtung von Figuren stehen im Zusammenhang miteinander, weswegen sie durch Änderung ihrer Richtung gedreht werden.
setze Richtung auf ((Richtung) + (15)) Grad setze Richtung auf ((Richtung) - (15)) Grad
gehe zu x: () y: ()
gehe zu x: (0) y: (0)
Dieser Scratch-Block wird sehr häufig verwendet, da er die genaue Position einer Figur festlegt. Stattdessen kann man aber auch die x- und die y-Position einzeln bestimmen.
setze x auf (0) setze y auf (0)
Achtung: Wenn der Malstift eingeschaltet ist, verhalten sich diese Blöcke anders!
Alternativ kann man die Figur in 0 Sekunden zu der gewünschten Position gleiten lassen.
gleite in (0) Sek. zu x: (0) y: (0)
gehe zu ()
gehe zu [Mauszeiger v] gehe zu [Zufallsposition v] gehe zu [Figur v]
Diese Optionen gehen alle auf einen einzigen Block zurück, dessen Funktionen man leicht mit anderen Blöcken erzielen kann.
gehe zu x: (Maus x-Position) y: (Maus y-Position) gehe zu x: (Zufallszahl von (-240) bis (240)) y: (Zufallszahl von (-180) bis (180)) gehe zu x: ([x-Position v] von [Figur v]) y: ([y-Position v] von [Figur v])
ändere () um ()
ändere x um (10) ändere y um (10)
Diese Blöcke erhöhen oder verringern die x- oder y-Position einer Figur, je nachdem, ob der Änderungswert positiv oder negativ ist.
setze x auf ((x-Position) + (10)) setze y auf ((y-Position) + (10))
setze () auf ()
setze x auf (0) setze y auf (0)
Diese Blöcke bestimmen entweder die horizontale x-Position oder die vertikale y-Position. Er wird verwendet, wenn nur eine Änderung von den genannten Möglichkeiten erfolgen soll.
gehe zu x: (0) y: (y-Position) gehe zu x: (x-Position) y: (0)
Aussehen
() () für () Sekunden
sage [Hallo!] für (2) Sekunden denke [Hmm…] für (2) Sekunden
Man kann diese Scratch-Blöcke umgehen, indem man den Text der Sprech- oder Denkblase bestimmt, eine bestimmte Zeit lang wartet und anschließend den Inhalt der Sprechblase leert.
sage [Hallo!] warte (2) Sekunden sage [] denke [Hmm…] warte (2) Sekunden denke []
() ()
sage [Hallo!] denke [Hmm…]
Wie lange die Sprechblase mit diesem Text sichtbar sein soll, ist nicht bestimmt, weswegen hier folgendes Workaround verwendbar ist.
sage [Hallo!] für (verbinde [Infinity] und []) Sekunden denke [Hmm…] für (verbinde [Infinity] und []) Sekunden
Da das oben genannte Workaround den Inhalt unendlich lang sagt, ist das Skript an diesem Punkt praktisch beendet, während es mit dem eigentlichen Block danach weitergeht. Die Wirkung ist also zu vergleichen, die Folgen auf das Programm sind jedoch unterschiedlich.Bei Einsatz des Workarounds kann es also eventuell zu unerwünschtem Verhalten des Programms kommen.
verstecke dich
verstecke dich
Dieser Block lässt eine Figur unsichtbar werden, was auch erreicht wird, wenn man die Transparenz auf das Maximum setzt. Hierbei bleibt die Figur allerdings klickbar, sodass bei eventueller Verdeckung anderer Figuren diese nicht angeklickt werden können. Außerdem wird sie nach Stoppen des Programms wieder sichtbar.
setze Effekt [Durchsichtigkeit v] auf (100)%
nächstes ()
wechsle zum nächsten Kostüm wechsle zum nächsten Bühnenbild
Die Figur wechselt zu ihrem nächsten Kostüm oder die Bühne zu ihrem nächsten Bühnenbild, was man auch folgendermaßen definieren kann.
wechsle zu Kostüm ((Kostümnummer) + (1)) wechsle zu Bühnenbild ((Bühnenbildnummer) + (1))
wechsle zu Bühnenbild ()
wechsle zu Bühnenbild [Bühnenbild v]
Um diesen Block zu umgehen, kann man stattdessen auch so lange zum nächsten Bühnenbild wechseln, bis man das richtige erreicht hat. Bei dieser Methode wird nicht zwischen Groß- und Kleinschreibung unterschieden, d.h. sie funktioniert nicht, wenn sich zwei Bühnenbild-Namen nur durch Groß- und Kleinschreibung unterscheiden.
wiederhole bis <(Bühnenbildname) = [Bühnenbild]> wechsle zum nächsten Bühnenbild end
schalte Grafikeffekte aus
schalte Grafikeffekte aus
Dieser Block schaltet alle sieben zur Verfügung stehenden Grafikeffekte aus, was man dementsprechend auch in sieben Blöcken machen kann.
setze Effekt [Farbe v] auf (0) setze Effekt [Fischauge v] auf (0) setze Effekt [Wirbel v] auf (0) setze Effekt [Pixel v] auf (0) setze Effekt [Mosaik v] auf (0) setze Effekt [Helligkeit v] auf (0) setze Effekt [Durchsichtigkeit v] auf (0)
ändere Größe um ()
ändere Größe um (10)
Anstatt die Figur direkt um einen bestimmten Wert zu ändern, kann die Figurengröße auch auf die Summe der aktuellen Größe und der Differenz gesetzt werden.
setze Größe auf ((Größe) + (10))
Malstift
hinterlasse Abdruck
hinterlasse Abdruck
Dieser Block lässt durch den Malstift einen Abdruck der Figur mit dem momentanen Aussehen hinterlassen. Also kann stattdessen auch ein Klon erstellt werden.
erzeuge Klon von [mir selbst v]
Achtung: Da Klone auch Skripte der Mutterfigur ausführen, kann es eventuell zu unerwünschtem Verhalten des Programms kommen.
Daten
ändere () um ()
ändere [Variable v] um (1)
Um diesen Block zu umgehen, kann man den momentanen Variablenwert mit dem gewünschten Änderungswert addieren und setzt die Variable auf diese Summe.
setze [Variable v] auf ((Variable) + (1))
füge () zu () hinzu
füge [Ding] zu [Liste v] hinzu
Dieser Block fügt der bestimmten Liste ein weiteres Element hinzu, das sich unter allen anderen Elementen dieser Liste befindet. Diese Funktion kann man auch anders erreichen, da man auf die Länge der Liste zugreifen kann.
füge [Ding] bei ((Länge von [Liste v]) + (1)) in [Liste v] ein
ersetze Element () von () durch ()
ersetze Element (1 v) von [Liste v] durch [Ding]
Möchte man ein Element ersetzen, kann man alternativ das Element auch löschen und dort ein neues einfügen.
lösche (1 v) aus [Liste v] füge [Ding] bei (1 v) in [Liste v] ein
Ereignisse
Wenn () > ()
Wenn [Lautstärke v] > (10) Wenn [Stoppuhr v] > (10) Wenn [Videobewegung v] > (10)
Dieser Block prüft, ob der im Dropdown-Menü festgelegte Wert größer ist als der andere.
Wenn die grüne Flagge angeklickt wiederhole fortlaufend warte bis <(Lautstärke) > [10]> . . . end Wenn die grüne Flagge angeklickt wiederhole fortlaufend warte bis <(Stoppuhr) > [10]> . . . end Wenn die grüne Flagge angeklickt wiederhole fortlaufend warte bis <(Video-[Bewegung v] von [Figur v]) > [10]> . . . end
Steuerung
warte () Sekunden
warte (1) Sekunden
Dieser Block lässt das Skript erst nach angegebener Zeit fortsetzen. Für ein Workaround kann die Stoppuhr verwendet werden.
setze Stoppuhr zurück warte bis <(Stoppuhr) < [1]>
wiederhole fortlaufend
wiederhole fortlaufend end
Diese Wiederholungsschleife wiederholt ihren Inhalt so lange, bis das Projekt gestoppt wird. Dies kann durch das Klicken des Roten Stoppschildes oder durch den Stoppe-Block zustande kommen. Diese Schleife kann durch eine Wiederhole-Mal-Schleife, in dessen Input, das die Anzahl der Schleifendurchläufe bestimmt, Infinity
gesetzt wird.
wiederhole (verbinde [Infinity] und[]) mal . . . end
Auch kann stattdessen eine Wiederhole-Bis-Schleife benutzt werden, dessen boolescher Inhalt stets false
zurückgibt. Zwar kann dies durch einen Wahrheitsblock erreicht werden, dessen Bedingung nie wahr ist, jedoch genügt auch ein leeres boolesches Input, da für ein solches immer false
gewertet wird.
wiederhole bis <> . . . end
falls () dann
falls <>, dann end
Dieser Klammerblock führt seinen Inhalt nur aus, wenn seine Bedingung wahr ist. Ist dem nicht so, wird das Skript ohne den Klammerninhalt fortgesetzt. Also kann stattdessen auch die Falls-Sonst-Klammer verwendet werden, bei dem zwar der obere Teil mit den gewollten Blöcken gefüllt ist, der untere aber leer ist.
falls <>, dann . . . sonst end
falls () dann () sonst
falls <>, dann sonst end
Welche der bestimmten Aktionen in dieser Klammer durchgeführt werden, hängt davon ab, ob die festgelegte Bedingung wahr oder falsch ist. Diesen Block kann man also auch mit zwei Falls-Dann-Klammern umgehen.
falls <>, dann . . . end falls <nicht <>>, dann . . . end
warte bis ()
warte bis <>
Dieser Block hält das Skript an, bis die festgelegte Bedingung eintrifft. Stattdessen kann man auch eine Wiederhole-Bis-Schleife verwenden, in die außer dem booleschen Inhalt nichts eingefügt wird, denn auf diese Weise wird so lange nichts wiederholt und das Skript dadurch pausiert, bis true
zurückgegeben wird.
wiederhole bis <> end
wiederhole bis ()
wiederhole bis <> end
Auch dieser Steuerungsblock lässt sich umgehen, allerdings nur durch Rekursion.
Definiere Schleife falls <nicht <>>, dann . . . Schleife end
stoppe dieses Skript
stoppe [dieses Skript v]
Um das Fortsetzen eines Skripts zu verhindern, kann als Workaround eine Aktion gewählt werden, die nie endet, so zum Beispiel eine Fortlaufend-Schleife ohne Inhalt.
wiederhole fortlaufend
Auch ein Warte-Bis-Block ohne eingefügtem Boolean ist denkbar, da somit auf eine Bedingung gewartet wird, die nichts anderes als false
zurückgibt, wodurch auch hier das Skript nicht weiterläuft.
warte bis <>
Achtung: Diese Umgehungen funktionieren anders, da das Skript nicht beendet wird. Daher hält es auch alle Übergeordneten Skripte an, anders als der Stoppe-Block:
Fühlen
Entfernung von ()
(Entfernung von [Mauszeiger v]) (Entfernung von [Figur v])
Durch den Satz des Pythagoras kann man diesen Block umgehen.
([Wurzel v] von (((([x-Position v] von [Mauszeiger v]) - (x-Position)) * (([x-Position v] von [Mauszeiger v]) - (x-Position))) + ((([y-Position v] von [Mauszeiger v]) - (y-Position)) * (([y-Position v] von [Mauszeiger v]) - (y-Position))))) ([Wurzel v] von (((([x-Position v] von [Figur v]) - (x-Position)) * (([x-Position v] von [Figur v]) - (x-Position))) + ((([y-Position v] von [Figur v]) - (y-Position)) * (([y-Position v] von [Figur v]) - (y-Position)))))
Tage seit 2000
(Tage seit 2000)
Um ohne diesen Block die Anzahl der vergangenen Tage seit 2000 ausfindig zu machen, kann man sich des anderen Zeitblocks () im Moment bedienen.
(((((365.242) * (([Jahr v] im Moment) - (2000))) + ((([Monat v] im Moment) - (1)) * ((365.242) / (12)))) + ([Tag v] im Moment)) - (1))
Operatoren
() < ()
<(A::grey) < (B::grey)>
Dieser ist ein boolescher Block, der true
zurückgibt, wenn der erste Wert größer ist als der zweite. Logischerweise gibt er false
zurück, wenn der erste Wert kleiner als der zweite oder beide Werte gleich groß sind.
<nicht <<(A::grey) > (B::grey)> oder <(A::grey) = (B::grey)>>
() = ()
<(A::grey) = (B::grey)>
Wenn der erste Wert nicht kleiner und auch nicht größer ist als der zweite, sind sie gleich.
<nicht <<(A::grey) < (B::grey)> oder <(A::grey) > (B::grey)>>
() > ()
<(A::grey) > (B::grey)>
Der erste Wert ist größer als der zweite, wenn er nicht kleiner ist als dieser und beide Werte nicht gleich sind.
<nicht <<(A::grey) < (B::grey)> oder <(A::grey) = (B::grey)>>
() und ()
<<A::grey> und <B::grey>>
Dieser Wahrheitsblock prüft, ob beide Bedingungen zutreffen und gibt in diesem Fall true
zurück. Wenn dem so sein soll, darf keine von ihnen unwahr sein.
<nicht <<nicht <A::grey>> oder <nicht <B::grey>>>
Wenn zwei Falls-Klammern ineinander verschachtelt werden, hat dies die gleiche Auswirkung.
falls <A::grey>, dann falls <B::grey>, dann . . . end end
() oder ()
<<A::grey> oder <B::grey>>
Dieser Block gibt true
zurück, wenn die erste, die zweite oder beide Bedingungen der Wahrheit entsprechen. Trifft dies jedoch auf beide nicht zu, gibt er false
zurück.
<nicht <<nicht <A::grey>> und <nicht <B::grey>>>
Das folgende Workaround bezweckt ebenfalls das Gleiche.
falls <A::grey>, dann . . . sonst falls <B::grey>, dann . . . end end
nicht ()
<nicht <A::grey>>
Ist die Bedingung eines booleschen Blocks unwahr, gibt er false
zurück.
<<A::grey> = [false]>
Stattdessen kann man auch eine Falls-Sonst-Klammer benutzen, bei der man nur den unteren Teil verwendet und den oberen leer lässt.
falls <A::grey>, dann sonst . . . end
Weitere Blöcke
()
benutzerdefinierter Block::custom
Seit Scratch 2.0 ist es möglich, eigene Blöcke zu erstellen. Hierbei lassen sich der neue Block mit dem Senden einer Nachricht mit Wartezeit sowie der Definitionsblock mit dem Nachricht-Kopfblock vergleichen.
sende [Nachricht v] an alle und warte
Achtung: Während eigene Blöcke ganz ausgeführt werden, bevor die nächste Aktion im Skript ausgeführt wird, werden Skripte, die durch Nachrichten ausgeführt werden, separat zum Hauptskript ausgeführt. Dadurch kann es eventuell zu unerwünschtem Verhalten des Programms kommen.
schalte Motor für () Sekunden an
schalte [Motor v] für (1) Sekunden an
Durch diesen Block wird der Motor an- und nach einer bestimmten Zeit wieder ausgeschaltet. Dies lässt sich mithilfe des Warte-Blocks leicht umgehen.
schalte [Motor v] an warte (1) Sekunden schalte [Motor v] aus
schalte Motor aus
schalte [Motor v] aus
Dieser Block lässt sich umgehen, indem der Motor für 0 Sekunden angeschaltet wird, denn danach wird er automatisch ausgeschaltet.
schalte [Motor v] für (0) Sekunden an
Stattdessen kann auch die Motorstärke auf 0 gesetzt werden.
setze Leistung von [Motor v] auf (0)
[wiki=de:Liste von Block-Workarounds]Liste von Block-Workarounds[/wiki]