Ich bin auf matter.js gestoßen und bin davon begeistert, weil es sich auf den Aspekt 2D-Physikengine konzentriert, performant ist und eine einfache API hat. Demzufolge wollte ich umsatteln, bzw. die Engine wenigstens für Eprobots einmal ausprobieren. Das hat gut funktioniert. Hier kann das Ergebnis auf Codepen angesehen werden: https://codepen.io/setreset/pen/pLBmPq
Eine Veränderung gegenüber den vorherigen Versionen ist die Tatsache, dass es wieder getrennte Programm- und Datenspeicher gibt. Dadurch kann der Datenspeicher wesentlich kleiner als der Programmspeicher gehalten werden. Das führt dazu, dass die Wahrscheinlichkeit größer ist, dass die Ausgabezellen durch OISC-Operationen zufällig adressiert werden. Dies gilt sowohl für das Initalisieren der OISC-Programme beim Erzeugen der ersten Eprobots-Generation, als auch für Mutationen während der Fortpflanzung. Subjektiv betrachtet, sind die Eprobots so von anfang an agiler, bzw. fitter.
Matter.js lässt sich auch um Features erweitern, wie zum Beispiel ein auto-wrap. Gemeint ist damit der Fall dass ein Objekt den Rand überschreitet und am gegenüberliegenden Rand wieder auftaucht.
Zusätzlich habe ich auch eine Möglichkeit gefunden mit „Sensors“ Input aus der Umgebung in die Eprobots zurückzuführen. Das kann man sich vorstellen wie eine „Unterlegscheibe“, welche die Kollisionen anders verarbeitet als der Eprobot. Die Kollisionsevents der „Unterlegscheibe“ werden so verarbeitet, dass der Eprobot sie wahrnehmen kann, führen aber zu keiner Gegenreaktion in der Physikengine, im Gegensatz zum eigentlichen Eprobots-Körper. Dies ist für mich aber noch experimentell und verbraucht auch mehr CPU-Leistung, weswegen es in der Demo vorerst noch deaktiviert ist.