Frage

Ich möchte Javascript in einem Hobby-Game-Engine von mir einzubetten. Nachdem wir nun die fünfte Generation von Javascript-Motoren aus (alle extrem schnelle) Ich bin gespannt, was Motor würden Sie wählen in einem C ++ Rahmen einzubetten (das schließt tatsächliche einfache embeding es)?

. Hinweis: Nur um klarzustellen, ich bin Javascript nicht interessiert DOM Scripting oder das Schreiben in einem Browser

Hier ist eine Zusammenstellung von Links so weit und einige Tipps aus dem Thread

Nur für das Protokoll, ich liebe Lua und habe es bereits etwa 5-mal bei der Arbeit in Game-Engines eingebettet ist.

Doch jetzt ist dies ein Hobby-Projekt, und ich denke, dass Javascript von den meisten Web-Entwickler und weil sein ECMA, Flash und Flex-Entwickler bekannt ist, ein Spiel-Engine, die JavaScript und XML for scripting verwendet wäre benutzerfreundlicher und gerecht auf eine größere Nutzerbasis (und eine, die ihre Fähigkeiten zu nutzen bisher keine Gelegenheit gehabt hatte, für Spiele) als ein mit Lua (und es gibt viele Menschen in ihrer Umgebung!).

Auch für die Aufzeichnung Ich werde auf diesem ein mit V8 gehen, vor allem, weil Ich mag es C ++ Stil.

War es hilfreich?

Lösung

Mozillas Spider ist ziemlich einfach und gut dokumentiert . Es ist ein C-API, aber es ist einfach es in C ++ zu wickeln. Es kann kompiliert werden Thread-sicher zu sein, was für Spiele nützlich ist, da Sie wahrscheinlich Ihre Haupt Logik in einem Thread und User-Interface-Logik in einem zweiten Thread haben wollen würden.

Googles V8 könnte eine gute Wahl sein, da Sie C verwenden ++, aber ich habe keine Erfahrung mit ihm noch. Nach der Dokumentation (dank < a href = "https://stackoverflow.com/questions/93692/which-javascript-engine-would-you-embed-in-an-application#97195"> Daniel James ), wird V8 nicht thread- sicher, obwohl dies in der Zukunft ändern kann.

Es gibt auch WebKit SquirrelFish , aber ich konnte nicht eine eigenständige Version, dass finden, wenn ich war auf der Suche früher.

Andere Tipps

Ich habe beide Spider und V8 versucht. Mit Spider, kann ich nichts an der Arbeit. Ich konnte nicht einmal bekommen die Beispiele auf mozilla.org zu kompilieren.

V8 gearbeitet out-of-the-box und ich habe einige grundlegende C ++ <-> Javascript Interaktion ziemlich schnell gehen. Es gibt einige Google-Listen für Menschen mit V8, und ich fand die meisten meiner Fragen dort bereits beantwortet.

Ich glaube, dass v8 funktioniert nur auf x86, x64 und ARM-Prozessoren im Moment. Welche könnte ein Nachteil sein.

Im Hinblick Sicherheit einzufädeln, von include / v8.h :

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

Sie können mehr in der Quelldatei lesen (es sieht aus wie doxygen Dokumentation, aber sie scheinen nicht es überall gesetzt zu haben oben).

Update: Dieser Kommentar wurde entfernt, wahrscheinlich vor einiger Zeit. Es sieht aus wie v8 hat jetzt ein Isolate Objekt, das eine Instanz des Motors darstellt. Eine einzelne Isolate Instanz kann nur in einem einzigen Faden zu einem Zeitpunkt verwendet werden, aber auch andere Isolate Instanzen können in anderen Threads zur selben Zeit verwendet werden.

Ist Java Script wirklich die richtige Sprache für Ihr Spiel? Viele Spiele da draußen werden über die Lua Programmiersprache für Skripting. Es ist leicht zu integrieren, es ist sehr klein, es auf fast jeder Plattform kompiliert und es ist leicht zu erlernen.

Diese etwas off topic, aber außerhalb der Box denken kann wichtig sein, die Dinge richtig zu machen.

Der Benchmark , das kam heraus, als V8 zuerst die Szene GESCHLAGEN zeigte V8 1000% (oder was auch immer) schneller als andere Motoren stark gewichtet wurde Motoren zu begünstigen, die bei Rekursion gut waren. Wenn Ihr Code viel Rekursion verwendet, dann könnten V8 geben Ihnen einen erheblichen Vorteil, Geschwindigkeit her. Für „reale Welt“ (zur Zeit zumindest) Web-Zeug, scheint SquirrelFish Extreme die Hände nach unten Siegern im Moment (siehe meine Blog-Post über das Thema für die Ergebnisse meiner eigenen, informellen Tests).

Wie andere haben darauf hingewiesen, einfache Integration und die Qualität der Dokumentation kann über reine Geschwindigkeit durchsetzen. Es nicht Buchse bedeuten, wenn Sie nicht versenden!

Bei einer Scripting-Engine und c ++ sprechen Sie auch chaiscript in Erwägung ziehen könnte. Es liegt in der Nähe ECMA-Script (~ Javascript) und sehr einfach in C ++ einzubetten.

Verkäufer von der Webseite:

  

... ChaiScript, auf der anderen Seite, wurde von Grund auf neu entwickelt   mit Integration in C ++ im Auge behalten.   ...   ChaiScript hat keine Meta-Compiler, keine Bibliothek Abhängigkeiten, keine Build   Systemanforderungen und kein Erbe Gepäck jeder Art. Bei arbeiten können   nahtlos mit beliebigen C ++ Funktionen, die Sie es aus. Es hat nicht   sagte ausdrücklich jede Art zu sein, es ist Funktion centric.

     

Mit ChaiScript können Sie buchstäblich beginnen Ihre Anwendung Scripting durch   Hinzufügen zu Ihrem Programm drei Zeilen Code und nicht zu ändern Ihr   Erstellungsschritte überhaupt.

ich für Tracemonkey warten würde, die nächste Evolutionsstufe des Spiderherauszukommen. Schneller und besser entwickelt. (Verwendet Code gespendet von Adobe Flash).

Tracemonkey ist stolz bei der Herstellung repetitious Aktionen viel schneller durch aggressiv die Struktur zur Laufzeit zu optimieren, basierend auf der tatsächlichen Nutzung, die für Spiel-Augmentation sein handliches Aught.

Versuchen Sie Javascript .NET:

http://javascriptdotnet.codeplex.com/

Es implementiert Google V8. Sie können Javascript direkt von .NET-Code mit ihm kompilieren und ausführen, und Versorgungs CLI-Objekten als auch durch den Javascript-Code verwendet werden. Und V8 ist wahrscheinlich der beste Motor, der je in Bezug auf Leistung erstellt, es erzeugt nativen Code von Javascript.

Sie können auch sehen V8 von Google. Es ist ziemlich neu, aber.

Ich würde ein Auge auf v8 halten, wie es ist, schnell Javascript-Engine zu schreien, und ich bin sicher, dass es plattformübergreifende Unterstützung entwickeln, wie es zur Reife wächst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top