Wahnsinn! Was man nicht alles ausprobieren muss ;-) Als ich mal wieder Lust hatte an meinem Cangaja Framework weiter zu arbeiten, kam mir die Idee eine neuere Box2D Version einzubinden.
Aktuell ist Box2DWeb, ein Port der Box2dFlash Version 2.1a in Cangaja in Verwendung. Die Version der original C++ Version von Box2D ist aber mittlerweile schon bei Version 2.2.1 2.3.0. Eine der nennenswerten Neuerungen seit der Version 2.2 (Version ohne Gewähr ;-) sind Chain Shapes mit denen man viele Eckpunkte verbinden kann um statische Objekte zu erzeugen.
Auf der Suche nach einer aktuelleren Box2D Version für Javascript bin ich auf ‚Port of Box2D to JavaScript using Emscripten‚ gestoßen. Dieses nutzt Emscripten um C/C++ Code über LLVM nach JavaScript zu kompilieren. Eine genauere Erklärung und die Vorteile davon werden hier erläutert -> Asm.js: The JavaScript Compile Target.
Gesagt getan wurde von mir die Emscripten Version von Box2D herunter geladen. Wie sich aber heraus stellte war diese nicht so einfach zu implementieren wie naiverweise Gedacht ;-) Nach einigen Recherchieren bin ich auf diesen Blogeintrag „Playing with the Emscripten port of Box2D“ gestoßen, der die Eigenheiten vom Emscripten kompilierten Box2D JavaScript Code genauer unter die Lupe nimmt.
Nachdem diese Hürden umschifft waren ging es weiter bei der Implementierung. Nach den ersten kleinen Erfolgen mit Circle Shape und Polygon Shape tauchten die nächsten Schwierigkeiten auf, die nicht genauer eroiert werden konnten da in der Konsole keine Fehlermeldung ausgegeben wurde.
Um besser nachvollziehen zu können was dort eigentlich passiert, wollte ich DebugDraw einbauen, aber das sollte auch nicht so leicht von statten gehen. Zumindest wird hier aber der Fehler ‚Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.‘ ausgegeben.
Nach etwas stöbern über Google in der Issues List von kripken’s / box2d.js kam heraus dass es eventuell nötig ist box2d.js neu zu kompilieren, schock schwere Not ;-)
Dazu muss aber zuerst Emscripten unter OS X installiert sein. Wie es weiter geht ist im nächsten Beitrag nach zu lesen…
Update zu diesem Thema: Emscripten war mir zu zeitaufwändig und umständlich. Wegen installation usw. ging mir zu viel Zeit verloren und man beschäftigt sich mit Sachen die einen gar nicht interessieren. Fürs erste habe ich das Thema abgehakt und beschäftige mich lieber mit meinem Cangaja Framework ;-)