Eprobots JS Phaser – Erste Demo

Ich habe es jetzt nach längerer Zeit geschafft, mich erneut mit der Javascript-Gameengine Phaser zu beschäftigen. Die Bibliothek hat sich deutlich weiterentwickelt und mein Ziel war es mein damaliges Beispiel mit der aktuellen Version neu umzusetzen und dann auch eine Fullscreen-Funktion einzubauen und das ganze zu einer „richtigen“ Eprobots-Simulation auszubauen. Dazu musste ich mich mit der neuen Physikengine beschäftigen. In der aktuellen Phaser-Version gibt es verschiedene Physik-Systeme: Arcade Physics, P2 Physics, Ninja Physics usw. Ich habe mich auf P2 Physics konzentriert. Das war die Pflicht. Die Performance der Simulation ist erstaunlich gut, auch mit mehreren hundert Objekten.

Die Kür war dann für mich persönlich also endlich meine OISC-Verhaltenssteuerung in die Agenten dieser Simulation einzubauen. Zuerst dachte ich, dass man Berechnung und Verwendung der Steuerwerte nicht in jedem einzelnen Frame machen sollte/bräuchte, aber die Bewegungen sehen so besser und natürlicher aus und die Performance ist trotzdem noch erstaunlich gut. Im Detail läuft es so ab, das die letzten beiden Speicherstellen zur Steuerung des Winkels und der Geschwindigkeit verwendet werden. Aus diesen beiden Werten wird der Impulsvektor berechnet der zur absoluten Geschwindigkeit addiert wird. Die Werte aus den Speicherzellen werden wieder mit Modulo in einen gültigen Bereich gemappt, um in jedem Fall einen verwendbaren Wert zu erhalten (Geschwindigkeit 0 bis 100, Winkel 0 bis 360). Die absolute Geschwindigkeit begrenze ich auch auf 450 Pixel/Sekunde, da es sich gezeigt hat, dass die Individueen sonst schneller umherrasen, als man es mitverfolgen kann, denn umso schneller ein Individuum ist, umso besser kann es sich fortpflanzen.

In dieser Eprobots-Simulation kann erstmals auch ein Körperparameter mitevolviert werden: Die Größe. Ich habe aber auch hier die Maximalgröße beschränkt, weil es sonst schnell aus dem Ruder läuft (große Individuen können sich besser vermehren). Zusätzlich habe ich eingebaut, dass sich der Maximalimpuls verringert, umso größer das Objekt ist, so dass größere Individuen träger sind.

Grundprinzip von Eprobots

Hier nochmal ein paar Sätze zum Grundprinzip. Genaueres kann der Dokumentation zu den zellenbasierten Eprobots entnommen werden. Es werden zufällige Indivuduen erzeugt und kontinuierlich Nahrung verteilt. Stößt ein Individuum gegen ein Nahrungsobjekt, wird das Nahrungobjekt entfernt und in der Nähe ein neues Individuum erzeugt, was die Eigenschaften des Elternobjektes erbt, aber auch einem Mutationsschritt unterworfen ist. Entstehen zufällig Eprobots die umherwandern, wird sich dieses erfolgreiche Verhalten durchsetzen. Nach einer gewissen Lebenszeit erstarren die Eprobots (rote Objekte oder „Fossilien“) und sind nur noch Hindernisse für die lebenden Eprobots, wodurch eine Art Umwelt entsteht.

Wichtig: Es gibt eine Maximalanzahl an Individuen, damit es nicht zu Performanceproblemen kommt.

 

Zur Demo auf Codepen