Discuss Scratch
- Discussion Forums
- » Deutsch
- » KLON
- Baumus
- Scratcher
100+ posts
KLON
Ich arbeite schon wieder an einem Projekt - Was für ein Wunder.
Diesmal geht's wieder um Klone
Wie könnte ich das ein Bisschen besser designen, dass es auch funktioniert? (Am Ende soll es ein Blitzeffekt sein)
Diesmal geht's wieder um Klone
Wie könnte ich das ein Bisschen besser designen, dass es auch funktioniert? (Am Ende soll es ein Blitzeffekt sein)
Wenn ich als Klon entstehe :: control
falls <(Kopie) = [1]> dann
setze [Position 1 v] auf [(Zufallszahl von (1) bis (3))]
gehe zu x: (Element ((Position 1) v) von [Positionen 1 v] :: list) y: (25)
zeige dich
setze [Heeligkeit v] -Effekt auf (200)
sende [Blitz v] an alle
setze [Kopie v] auf [2]
wiederhole (Zufallszahl von (5) bis (10)) mal
erzeuge Klon von [mir selbst v]
end
end
- NpChecker
- Scratcher
100+ posts
KLON
Hallo Baumus!
Wenn du mit deinem gebrauchten Skript erreichen möchtest, dass die x-Position des Klons auf den Wert des Listenelements gesetzt wird, der den gleichen Wert der Variable Position 1 beinhaltet, kannst du das auch einfach so programmieren, dass die x-Position gleich auf den Wert der Variable Position 1 gesetzt wird, also etwa so:
Außerdem wird in deinem Skript der Helligkeit-Effekt auf 200 gesetzt. Das ist aber nicht nötig, da höchstens 100 gewählt werden kann; bei höheren Werten kommt da eben, glaube ich, der gleiche Helligkeit-Effekt wie bei 100.
Da ich jetzt nicht weiß, wozu genau die Variablen und die Nachricht dienen (hier ist ja nur ein Skript gepostet), hier noch einmal eine Möglichkeit für einen Blitzeffekt:
Hierbei können die Zahlen auch variieren, du solltest sie eben richtig kombinieren.
Liebe Grüße
NpChecker
Wenn du mit deinem gebrauchten Skript erreichen möchtest, dass die x-Position des Klons auf den Wert des Listenelements gesetzt wird, der den gleichen Wert der Variable Position 1 beinhaltet, kannst du das auch einfach so programmieren, dass die x-Position gleich auf den Wert der Variable Position 1 gesetzt wird, also etwa so:
setze x auf (Position 1)
Außerdem wird in deinem Skript der Helligkeit-Effekt auf 200 gesetzt. Das ist aber nicht nötig, da höchstens 100 gewählt werden kann; bei höheren Werten kommt da eben, glaube ich, der gleiche Helligkeit-Effekt wie bei 100.
Da ich jetzt nicht weiß, wozu genau die Variablen und die Nachricht dienen (hier ist ja nur ein Skript gepostet), hier noch einmal eine Möglichkeit für einen Blitzeffekt:
wiederhole (4) mal
ändere [Helligkeit v]-Effekt um (25)
end
wiederhole (4) mal
ändere [Helligkeit v]-Effekt um (-25)
end
Hierbei können die Zahlen auch variieren, du solltest sie eben richtig kombinieren.
Liebe Grüße
NpChecker
- Baumus
- Scratcher
100+ posts
KLON
OK Ich habe auch schon die beiden anderen Skripte verwendet:
Und natürlich der Code zum spawnen der Klone:
Das Problem ist, die Klone werdender nicht gesetzt, obwohl ich mit
Wenn ich als Klon entstehe
falls <(Kopie) = [2]> dann
gehe zu x: (Element ((Position 1)) von [Positionen 1 v] :: list) y: (25)
zeige dich
setze [Helligkeit v] -Effekt auf (200)
setze Richtung auf ((Zufallszahl von (-179) bis (269)))
gehe (10) er-Schritt
lösche diesen Klon
end
Und natürlich der Code zum spawnen der Klone:
Wenn ich [Start v] empfange
warte (1) Sek.
wiederhole (8) mal
erzeuge Klon von [mir selbst v]
warte (0.8) Sek.
end
Das Problem ist, die Klone werdender nicht gesetzt, obwohl ich mit
setze [Kopie v] auf [1]die lokale Variable Kopie bei
Wenn die grüne Flagge angeklicktjedesmal wieder resette.
- NpChecker
- Scratcher
100+ posts
KLON
Hallo erneut!
Ich rate dir als Tipp, bei solchen Problemen die entsprechende Variable beim Testen anzeigen zu lassen, sodass du sehen kannst, welchen Wert sie hat und wann dieser geändert wird. Außerdem solltest du prüfen, ob bzw. wann die Nachricht Start gesendet wird.
Liebe Grüße
NpChecker
Ich rate dir als Tipp, bei solchen Problemen die entsprechende Variable beim Testen anzeigen zu lassen, sodass du sehen kannst, welchen Wert sie hat und wann dieser geändert wird. Außerdem solltest du prüfen, ob bzw. wann die Nachricht Start gesendet wird.
Liebe Grüße
NpChecker
Last edited by NpChecker (June 24, 2017 08:23:01)
- Logical03
- Scratcher
8 posts
KLON
hi! auch ich habe bei meinem letzten Projekt mit Klonen gearbeitet
Damit dann die Erzeugung von Klonen nicht so lange dauert, kann man direkt an das obere Skript noch
Das Projekt:
https://scratch.mit.edu/projects/167642202/
Ich hoffe ich konnte dir damit irgendwie helfen!
lg, Logical03
Wenn ich als Klon entstehe
ändere [ x] um (24)
gehe zu x: ([x]) y: ([y])
Damit dann die Erzeugung von Klonen nicht so lange dauert, kann man direkt an das obere Skript noch
erzeuge Klon von [ mir selbst]anhängen.
Das Projekt:
https://scratch.mit.edu/projects/167642202/
Ich hoffe ich konnte dir damit irgendwie helfen!
lg, Logical03
Last edited by Logical03 (June 29, 2017 17:46:18)
- scriptimus-prime
- Scratcher
25 posts
KLON
@Logical03
So funktioniert es aber nicht richtig, denn du hast eine endlose Rekursion beschrieben. Auch dein Projekt erzeugt unendlich Klone, da das “wenn ich als Klon entstehe”-Skript keinerlei Abbruchbedingung enthält, aufgrund derer es irgendwann einmal aufhören würde, sich selbst zu reproduzieren. Es klappt nur deshalb - und nur rein zufällig - weil Scratch maximal 300 (301) Klone erlaubt und danach einfach keine weiteren mehr erzeugt. Würde aber nicht diese recht knappe Systembeschränkung zuschlagen, würde dein Skript hunderte, tausende, Millionen an Klonen generieren. So etwas muss man im Programmcode unbedingt verhindern.
In deinem Pixel-Malbereich sind zwar nur 270 Pixel-Stellen, aber die überzähligen 31 Klone sitzen alle in der untersten Zeile in den linken Spalten gleich mehrfach übereinander. Und wie gesagt - wenn nicht die Scratch-Systembeschränkung dem ganzen Einhalt gebieten würde, säßen dort unten hunderttausende Klone übereinander.
Also - weder die “wiederhole fortlaufend”-Schleife in deinem Startskript, sollte endlos Klone erzeugen, noch sollte ein Klon sich selbst reproduzieren, wenn diese Rekursion nicht durch eine geeignete Abbruchbedingung irgendwann geplant endet.
So funktioniert es aber nicht richtig, denn du hast eine endlose Rekursion beschrieben. Auch dein Projekt erzeugt unendlich Klone, da das “wenn ich als Klon entstehe”-Skript keinerlei Abbruchbedingung enthält, aufgrund derer es irgendwann einmal aufhören würde, sich selbst zu reproduzieren. Es klappt nur deshalb - und nur rein zufällig - weil Scratch maximal 300 (301) Klone erlaubt und danach einfach keine weiteren mehr erzeugt. Würde aber nicht diese recht knappe Systembeschränkung zuschlagen, würde dein Skript hunderte, tausende, Millionen an Klonen generieren. So etwas muss man im Programmcode unbedingt verhindern.
In deinem Pixel-Malbereich sind zwar nur 270 Pixel-Stellen, aber die überzähligen 31 Klone sitzen alle in der untersten Zeile in den linken Spalten gleich mehrfach übereinander. Und wie gesagt - wenn nicht die Scratch-Systembeschränkung dem ganzen Einhalt gebieten würde, säßen dort unten hunderttausende Klone übereinander.
Also - weder die “wiederhole fortlaufend”-Schleife in deinem Startskript, sollte endlos Klone erzeugen, noch sollte ein Klon sich selbst reproduzieren, wenn diese Rekursion nicht durch eine geeignete Abbruchbedingung irgendwann geplant endet.
Last edited by scriptimus-prime (June 29, 2017 19:42:12)
- Baumus
- Scratcher
100+ posts
KLON
Das stimmt nicht erstens habe ich keine wiederhole fortlaufend-Schleife verwendet, zweitens wird die Reproduktion der Klone dadurch gestoppt dass ich die lokale geklonte Variable “Kopie” für den Klon (Und somit auch für die nächste Klonebene) auf 2 gesetzt wird.
Ein Freund hat mir gesagt dass man Klone nicht in einer Schleife setzen darf, weil es sonst zu Fehlern kommen kann. Stimmt das?
Ein Freund hat mir gesagt dass man Klone nicht in einer Schleife setzen darf, weil es sonst zu Fehlern kommen kann. Stimmt das?
- Arnie1_0
- Scratcher
100+ posts
KLON
Ein Freund hat mir gesagt dass man Klone nicht in einer Schleife setzen darf, weil es sonst zu Fehlern kommen kann. Stimmt das?
Kannst du deinen ‘Freund’ dann bitte einmal fragen, wo er das Geschwafel her hat? Ich benutze Kone normal immer in Schleifen. Bei mir sieht das dann oft ca. so aus:
...
setze [c_number v] auf [0] // c_number ist eine globale Variable
wiederhole (10) mal
ändere [c_number v] um (1)
erzeuge Klon von [mir selbst v]
end
...
Wenn ich als Klon entstehe
zeige dich
setze [ID v] auf (c_number)// ID ist eine private Variable
falls <(ID) = [1]> dann
...
end
falls <(ID) = [2]> dann
...
end
...
So hat man immer die Anzahl an Klonen, die erstellt wurden und jeder Klon hat eine ID, über die die Klone unabhängig voneinander agieren können.
Wenn du mir jetzt erklären kannst, was daran Fehler verursachen soll, wäre ich dir dankbar
Falls du das mit der Rekursion meinst … da hat dich Optimus Prime (ähem ich meine scriptismus prime) ja schon darauf hingewiesen.
- scriptimus-prime
- Scratcher
25 posts
KLON
Meine Antwort galt auch nicht dir, sondern Logical03. Sein Beispiel und sein verlinktes Projekt erzeugt durch die Rekursion unerndlich Klone. Das stimmt nicht erstens habe ich keine wiederhole fortlaufend-Schleife verwendet, zweitens wird die Reproduktion der Klone dadurch gestoppt dass ich die lokale geklonte Variable “Kopie” für den Klon (Und somit auch für die nächste Klonebene) auf 2 gesetzt wird.
- Baumus
- Scratcher
100+ posts
KLON
OK
#Arnie1_0
Mein Freund hat außerdem noch gesagt, dass in dem unteren Teil des Skriptes nicht nur Steuerungsblöcke setzen darf.
Außerdem habe ich bereits geschrieben, dass ich zum setzen der Klone nur eine wiederhole 8 mal-Schleife verwendet habe.
#Arnie1_0
Mein Freund hat außerdem noch gesagt, dass in dem unteren Teil des Skriptes nicht nur Steuerungsblöcke setzen darf.
Außerdem habe ich bereits geschrieben, dass ich zum setzen der Klone nur eine wiederhole 8 mal-Schleife verwendet habe.
- Baumus
- Scratcher
100+ posts
KLON
Wie ist das gemeint? Ich meine alles so wie ich es geschrieben habe. Mein Freund hat mir erzählt, dass wenn
… die Klone in Schleifen gesetzt werden
…und der Skript nur Steuerungsblöcke enthält,
das Ganze nicht funktioniert.
… die Klone in Schleifen gesetzt werden
…und der Skript nur Steuerungsblöcke enthält,
das Ganze nicht funktioniert.
Ein Freund hat mir gesagt dass man Klone nicht in einer Schleife setzen darf, weil es sonst zu Fehlern kommen kann. Stimmt das?
Mein Freund hat außerdem noch gesagt, dass in dem unteren Teil des Skriptes nicht nur Steuerungsblöcke setzen darf.
- Discussion Forums
- » Deutsch
- » KLON