Zuordnung von instance-IDs

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zuordnung von instance-IDs

    Hallo,

    Seit einiger Zeit verwende ich GM 8.1 Standard, um z.B. biologische oder physikalische Vorgänge vereinfacht zu visualisieren. Gerade möchte ich ein kleines "Evolutionsspiel" programmieren, in welchem sich Objekte/Instanzen in einer programmierten Umwelt behaupten müssen und sich durch zufällige "Mutationen" anpassen können. Zum Einstieg möchte ich eine Programm schreiben, bei dem ein "Mutterobjekt" in bestimmten Zeitabständen bzw. unter bestimmten Unständen "Tochterobjekte" erzeugt, welche sich mehr oder weniger zufällig um das "Mutterobjekt" gruppieren und dieses begleiten (das "Mutterobjekt" bewegt sich). Wenn "Tochterobjekte" mit verschiedenen Eigenschaften (fressen, Feindabwehr etc.) erstellt werden, kann so ein zusammengesetztes "Lebewesen" sich in seiner programmierten Umgebung wie eine Amöbe bewegen und verschiedene "Lebensvorgänge" vollführen, wie fressen, Hindernisse umfließen usw. Das klappt auch ganz gut und sieht sehr interessant aus. Ich lasse die neuen Tochterinstanzen in einem zufälligen Bereich um die Mutterinstanz entstehen und dieser dann über "move_towards" im Step-event folgen. Jetzt würde ich aber gerne diese "Amöbe" sich teilen lassen, so dass immer mehr eigenständige zusammengestzte Objekte (oder besser Instanzgruppen) entstehen. Dies wollte ich durch regelmäßige Teilung des "Mutterobjektes" verwirklichen, welches dann eigene neue "Tochterobjekte" bildet (ich meine natürlich hier stets Instanzen best. Tochterobjekte). Weiß jemand, wie ich die "Tochterobjekte" auf das jeweilige neue "Mutterobjekt" prägen kann? Wie kann ich dem neu gebildeten "Tochterobjekt" die instance-ID seiner "Mutter" einprogrammieren? Ich muss der Tochterinstanz sagen welche ID sein Mutterobjekt hat. Mit var = instance_create(obj_Mutter.x,obj_Mutter.y,obj_Mutter) bin ich bisher gescheitert, bin aber denke ich auf den richtigen Weg. Ich bin sicher für viele Experten hier ist das eine Kleinigkeit.

    Noch eine andere Frage: Ist es prinzipiell auch möglich, dass ein laufendes Programm selbst (nicht vom Programmierer vorher festgelegt) neue Objekte (neue Eigenschaften, eigener Namen) erstellen kann?

    Ich würde mich sehr über Ratschläge freuen.

    Viele Grüße und jetzt schon mal vielen Dank

    Peter
  • Noch eine andere Frage: Ist es prinzipiell auch möglich, dass ein
    laufendes Programm selbst (nicht vom Programmierer vorher festgelegt)
    neue Objekte (neue Eigenschaften, eigener Namen) erstellen kann?
    Der Game Maker bietet Funktionen an um Ressourcen innerhalb der Laufzeit zu erstellen oder zu verändern, für Objekte gibt es z.B. die folgenden Funktionen: gm-d.de/help/hh_start.htm?409_08_objects.html .

    Weiß jemand, wie ich die "Tochterobjekte" auf das jeweilige neue
    "Mutterobjekt" prägen kann? Wie kann ich dem neu gebildeten
    "Tochterobjekt" die instance-ID seiner "Mutter" einprogrammieren?
    Du kannst Variablen benutzen um die ID zu speichern.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Vielen Dank

    Das ist ja klasse, wie schnell hier Fragen beantwortet werden ! Vielen Dank. Momentan ist noch nicht viel zu sehen. Eine immer größer werdende Zahl von Tochter-Instanzen umfliegen das Mutterobjekt. Habe mal versucht mit move_towards für x: instance_nearest(obj_zelle.y,obj_zelle.y,obj_zelle).y+random_range(-100,100) und für y: instance_nearest(obj_zelle.x,obj_zelle.y,obj_zelle).y+random_range(-100,100), speed 20 die Tochterobjekte zu den jeweils nächsten Mutterobjekt fliegen zu lassen. Die Tochter-Instanzen fliegen dann aber allesamt entweder zum einen oder zum anderen Mutterobjekt. Ich werde versuchen die Ratschläge umzusetzen. Wenn Interesse besteht gebe ich die Programmteile gerne weiter. Mein ferneres Ziel wäre es, eine Umwelt zu programmieren (mit best. Ressourcen) und dort Objekte reinzusetzen, die sich durch Mutation an diese Umwelt anpassen (natürlich keine neue Idee). Jedes Lebewesen besteht eben aus einen Schwarm an Tochtertobjekten, die unterschiedliche Eigenschaften haben (so eine Art Zellverband). Aber zuerst muss ich die Sache mit den Instance-IDs lösen.

    Die Möglichkeit das in der Laufzeit neue Objekte erstellt werden können ist für ein "Evolutionsprogramm" sicher auch sehr interessant.
  • mögliche Lösung für die ID-Zuordnung Mutter-Instanz - Tochter-Instanz

    Habe eine, vielleicht etwas unelegante Lösung gefunden:

    Die Tochterinstanzen werden auf die jeweils am nächsten liegende Mutterinstanz geprägt.

    Im Create-Event der Tochter-Instanz:

    Die Instanz-Id wird in der Variable "Mutter" gespeichert. Mutter = instance_nearest(x,y,obj_Mutter);

    In einem Step-Event wird ein move towards-Befehl mit "Mutter.x+random_range(-100,100)" für x, Mutter.y+random_range(-100,100), speed 20 ausgefüllt. "random_range(-100,100)" verteilt die Tochterobjekte in einem zufälligen Bereich um das Mutterobjekt. Die "Mutter" ist so eine Art Zellkern, die Tochterobjekte die Amöbenzelle.

    Gibt sicher noch besser Lösungen, aber so funktioniert es ganz gut.

    Vielen Dank nochmal für die schnelle Hilfe!
  • Ich habe den Thread nur überflogen, aber besser ist es, du legst die Mutter-Variable bei der Erstellung fest. instance_nearest kann schließlich auch, zumindest theoretisch, die falsche Mutter zurückgeben. Da ist die Methode von famous deutlich besser. Ich schreib das mal eben etwas übersichtlicher auf

    GML-Quellcode

    1. // Irgendwo im Mutter-Code...
    2. var ins;
    3. ins = instance_create(x, y, obj_zelle); // es wird unmittelbar das Create-Event der neuen Zelle ausgeführt. Im Create-Event sollte dort z.B. mutter = noone; stehen...
    4. // ... aber die Id der Mutter müssen wir noch ergänzen
    5. ins.mutter = id; // setzt die mutter-Variable von ins auf die eigene Instanzen-Id