This is a read-only archive of the old Scratch 1.x Forums.
Try searching the current Scratch discussion forums.

#1 2010-07-13 07:50:15

fetterFrosch
New Scratcher
Registered: 2010-06-26
Posts: 3

Selbstbewustsein

Selbstbewustsein - 'Weis' ein Objekt, wer es ist, z.B. das es "Willi" heißt? Dann könnte man einem Objekt auch eine Meldung schicken:

z.B. in der Art
Sender: setzGlobaleVariable ZielObjektName="Willi"
sendeBotschaftAnAlle bewegDich

Empfänger: WennBotschaftEmpfangen bewegDich
WennBedingungZutrifft ZielObjektName="Willi"
...

Anlass der Frage: Es geht um die Simulation einer handvoll Murmeln, die aufeinander einwirken sollen. Sie sollen beliebig dupliziert werden, haben also identische Programme. Die generischen Namen lauten dabei: Objekt1, Objekt2 ... usw.

Für Lösungshinweise danke. Werde meine Zwischenergebnisse noch hineinstellen.

Offline

 

#2 2010-08-06 16:42:54

MartinWollenweber
Scratcher
Registered: 2007-04-10
Posts: 100+

Re: Selbstbewustsein

Hallo fetterFrosch,
Deine Frage ist sehr berechtigt, denn in Scratch sind immer alle Objekte die eine Nachricht enthalten gleichzeitig die Empfänger. Wenn nun Objekte, die 1:1 Kopien voneiander sind (wie z.B. Deine Murmeln), unterschidlich auf die gleiche Nachricht reagieren sollen (als z.B. einer reagiert, die andern nicht), müssen sie sich durch den Wert einer lokalen Variable unterscheiden. Wie in Deinem Vorschlag könnte der Sender eine globale Variable setzen und alle potentiellen Empfänger prüfen, ob ihre lokale Unterscheidungsvariable diesem Wert entspricht. Ich habe viele Projekte, in denen 1:1 Objekt-Kopien unterschidliche Rollen einnehmen sollen und löse das immer so: In einem Startprogramm (das für jede der 1:1 Objektkopien natürlich identisch ist) setzt jede Objektkopie sich einen unterschiedlichen Zählwert in eine lokale Indexvariable. Diese Indexvariable wird dann später zur Unterscheidung "Wer bin ich?" genutzt. Beispiel: Für die Start-Gradzahl und die Farbe der Strahlen in    kaleidoscopePlus http://scratch.mit.edu/projects/MartinWollenweber/20407 wird die lokale Indexvariable "actualRay" verwendet. Diese wird im Programm "changeRays" festgelegt, indem der Wert der golbalen Variable  "countRays" übernommen und "countRays" danach um 1 erhöht wird. Dadurch hat jede Objektkopie eine unterschiedlicehn Indexwert in "actualRay" und kann so unterschieden werden. Mit Deinen Murmeln müßte das auch so gehen.

In folgendem Projekt wird genau das gleiche Prinzip verwendet:
http://scratch.mit.edu/projects/MartinWollenweber/348556

Hier heißt das Indizierungsprogramm "Reset", die lokale Unterscheidungsvariable "localNumber" und die globale Variable, die hochgezählt wird, um die "localNumber" in allen Objektkopien unterschiedlich zu setzen heist "number".

Ich hoffe, ich konnte Dir helfen?


Martin
...mitmachen beim  DACH-Scratch-Wiki und Scratch-Wiki-Autor werden!

Offline

 

Board footer