Was muss ich tun damit sich Klone anderen Klonen nähern (Scratch)?

5 Antworten

Füge beim Clonen jeweils das neu entstandene Objekt in eine Liste ein (Füge Objekt Myself in Liste irgendwas hinzu). Wenn das Objekt gelöscht wird, muss es sich wieder rauslöschen. Mache zwei Listen, eine mit allen verbündeten und eine mit allen gegnerischen Objekten. Dann kannst du aus den Listen jeweils die Objekte aufrufen (z.B. Zeige auf 3. Element von Liste irgendwas || Mit wiederhole Schleife die Liste durchgehen und jeweils prüfen - Berühre x. Element von Liste irgendwas?)

So geht es jedenfalls in Byob am besten ....


ShinyArmageddon  09.05.2020, 10:37

Pardon - ich habe es damals über den Objektnamen gemacht. Siehe neue Antwort.

0

Mit den Objektnamen klappt es leider wirklich nicht...

Bild zum Beitrag

Ich hätte hier eine etwas umfangreichere Idee, um Klone zu verwalten - befürchte jedoch, dass diese dir bei komplexeren Projekten zu schwierig sein könnte, da man etwas viel mit Mathematik arbeitet:

Man speichert anstatt der Objektnamen deren ID, welche wiederum in den kleinen Dezimalstellen der x-Koordinate versteckt ist. Das Bild zeigt alles [in dem Test habe ich 10 Klone erstellt, welche ihre eigene ID kennen und daher immer ihre Koordinaten in das Feld der Liste schreiben, dass die Nummer der ID hat]

Jetzt kannst du z.B. auf Objekt ID-3 zeigen, indem du ein Hilfsobjekt zu den in den Listen gespeicherten Koordinaten setzt, auf welches dann gezeigt wird. Oder, wenn man's sich schwer machen möchte: Mit trigometrischen Formeln ausrechnen, welche Richtung man bräuchte.

Aufarbeitung; synchrone Verwendung von nicht ganzzahligen Koordinaten und ID zugleich:

Die Dezimalstellen nach dem Komma dürfen nicht großartig verändert werden. Ich speichere die Einerstelle der ID in der 6. Nachkommastelle. Wenn man eine 4-stellige Zahl von Klonen bei einem Programmdurchlauf erzeugt, dann wäre z.B. bei ID 5034 deren X-Koordinate:

?,??5034

Man kann es sicherlich auch in der 7. oder 8. Nachkommastelle speichern, um mehr Spielraum zu haben - aber ich weiß nicht, wie viele Nachkommastellen Scratch akzeptiert.

Das heißt aber auch: Befehle, wie 'Gehe 10-er Schritt' zerstören diese Nachkommastellen, wenn das Objekt schräg läuft. Man müsste stattdessen an Hand deren Richtung und über trigometrische Formeln (Sinus/Cosinus/Tangens) die X-Koordinate und Y-Koordinate so ändern, dass es ungefähr einem 10-er Schritt entspricht, aber zugleich so sehr abrundet, dass die relevanten Nachkommastellen nicht verändert werden.

Außerdem: Wenn man die Nachkommastellen irgendwie ausliest, muss man beim Auslesen der ID [im Bild unten, links der grüne Block] erst mit 10^x multiplizieren (x ... Zahl der Nachkommastellen, welche noch nicht für die ID fungieren) und dann dementsprechend statt, wie im Bild mit 10 000 000, mit (10 000 000 / 10^x) multiplizieren.

 - (programmieren, Scratch)

AnonymerDepp 
Beitragsersteller
 31.05.2020, 13:04

ja das ist ziemlich umfangreich. ich hätte noch die Idee, dass ich mit Farben arbeite, also wenn Farbe rot berührt Farbe blau, dann passiert ... z.B.

Ich mache dann ein Kreuz dessen Arme verschiedene Farben haben und der Mittelpunkt mit ebenfalls einer anderen Farbe versehen ist und wenn quasi ein Arm berührt wird, drehen sich die Klone in die entsprechende Richtung. Wie findest du die Idee? Ich habs bereits ausprobiert und manchmal reagiert da nichts, was muss ich beachten. ich weiß, dass da Ebenen/Layers sind, aber ich verstehe sie nicht ganz und brauche auf jeden Fall, dass beide Klone auf Farben reagieren.

0
ShinyArmageddon  31.05.2020, 21:13
@AnonymerDepp

Ich muss zugeben, dass ich deinen Ansatz nicht ganz verstehe ... was erreichst du damit? Drehen sich dann ALLE Klone von Spieler A zu Klon C, wenn Ereignis B für einen beliebigen Klon C von Spieler B erreicht ist? Ereignis B = ein Klon von Spieler A ist einem Klon von Spieler B nahe.

Wenn ja ... ist das nicht auch etwas ... ähm ... hässlich(?)

Unzuverlässig ist es ja so oder so, da mehrere Klone übereinander die Kreuze verdecken können - sprich, wenn zu viele Klone eng aufeinander sind, dann gibt's Bugs im Spiel.

0
ShinyArmageddon  31.05.2020, 21:18
@ShinyArmageddon

Tipp: Meine Idee lässt sich auch mit der Lautstärke umsetzen. Dazu einfach die Lautstärke auf die ID setzen. Dann muss man keine Nachkommastellen rumjonglieren und dann kannst du alles in der Antwort ab "Aufarbeitung; synchrone Verwendung von nicht ganzzahligen Koordinaten und ID zugleich:" ignorieren.

Nachteil: Die Objekte können keine Töne abspielen, da sie alle andere Lautstärken haben.

Etwas mathematisch noch anspruchsloseres fällt mir (derzeit) nicht ein.

0

Bild zum Beitrag

Das wäre das Grundgerüst bei Byob.

WICHTIG - manchmal werden 'Empfange'-Befehl anders verarbeitet. Ich weiß nicht, ob das am PC oder an der Byobversion liegt.

Variante 1: Wenn ich empfange, starte Blockkette von vorne.

Variante 2: Wenn ich empfange und die Blockkette derzeit nicht aktiv ist: Starte Blockkette von vorne.

---> Bei mir ist es Variante 1. Sollten bei meinem Beispielskript beim Klonen irgendeines Objekte jedesmal alle Objekte wieder zu 0|0 gehen, dann hat man Variante 2 und muss entsprechend bei der Programmierung etwas anders vorgehen.

 - (programmieren, Scratch)

AnonymerDepp 
Beitragsersteller
 14.06.2020, 13:27

Hab´s probiert, es kommen keine Klone. Nur das Original bewegt sich. Ich selbst verstehe aber auch nicht, wie auf diese Weise überhaupt Klone entstehen sollen. Du versendest doch quasi eine Textnachricht und dadurch bewegt sich das Original. Und ist Object Clone Operator nicht das gleiche wie Object myself in diesem Fall?

0
ShinyArmageddon  14.06.2020, 13:33
@AnonymerDepp

Pardon. Nach dem Ereigniss 'Empfange' muss natürlich noch ein 'falls[ nicht[ Object myself = Object Clone Operator]]' kommen, damit nur die Klone reagieren.

Ansonsten hat man den Block "Warte[ clone] Sekunden". Der ist zugegebenermaßen etwas komisch - ich weiß auch nicht, warum es den 'Clone'-Block als Attribut und nicht Methode gibt.

Wenn du also mein beispiel durchführst, dann hast du unten in der Objektleiste immer noch nur ein Objekt, welches angezeigt wird? Keine Klone? Mein Programmcode war zwar etwas blöd gewählt, weil das Hauptobjekt den Quatsch von den Klonen auch mitmacht, aber naja - die Klone sollten dennoch entstehen.

Ich vermute ehrlich gesagt nur, dass bei dir die genannte Variante 2 auftritt und deswegen alle Klone übereinander sind.

1

Bild zum Beitrag

Analoge Abänderung mit Lautstärke. Falls du mit deinem farbigen Kreuz überprüft hast, ob der Abstand zwischen zwei Objekten klein ist: Der Abstand lässt sich wie folgt berechnen und also auch mathematisch überprüfen:

Die Wurzel von:

der Differenz der X-Koordinaten im Quadrat addiert mit der Differenz der Y-Koordinaten im Quadrat.

 - (programmieren, Scratch)

Könnte dir leider auf die Schnelle nur sagen wie das aufeinander zubewegen geht...

Drehen weiß ich im Augenblick leider nicht ;-;

Woher ich das weiß:Studium / Ausbildung – Informatikstudent

AnonymerDepp 
Beitragsersteller
 09.05.2020, 10:19

Ich weiß selbst wie sich ein Objekt zu einen anderen Objekt drehen kann oder zugehen kann, aber weiß nicht wie es bei der Farbe geht

0
Oklinq  09.05.2020, 11:55
@AnonymerDepp

Hö? Ich dachte du bekommst es mit den Klonen nicht hin, dass sie sich aufeinander zubewegen

0
AnonymerDepp 
Beitragsersteller
 09.05.2020, 15:08
@Oklinq

Achso, ja dass sich 2 Klone gegenseitig nähern, weiß ich nicht, ich dachte du meintest es im Generellen.

1
AnonymerDepp 
Beitragsersteller
 22.05.2020, 15:19

Vergiss, was ich gesagt habe, erkläre es mir bitte doch.

0
Oklinq  22.05.2020, 17:46
@AnonymerDepp

Wie gesagt, ich weiß nur wie es ohne Drehen geht....

Mache 2 Variablen, dann "wenn ich als klone enstehe" "wiederhole Fortlaufend" "setze Variable 1 auf x" "setze Variable 2 auf y"

Dann kannst du den anderen Richtung den Cords aus den Variablen laufen lassen

0
AnonymerDepp 
Beitragsersteller
 26.05.2020, 20:16
@Oklinq

aber das funktioniert doch nicht individuell (sowas kann doch nur die vorprogrammierte Variable ,,meine Variable" für jeden einzelnen Klone, oder etwa doch?

0