Domanda

Voglio incorporare Javascript in un mio motore di gioco per hobby.Ora che abbiamo la quinta generazione di motori Javascript (tutti incredibilmente veloci), sono curioso di sapere quale motore sceglieresti di incorporare in un framework C++ (che include l'effettiva facilità di incorporarlo)?

Nota:Giusto per chiarire, non sono interessato allo scripting DOM o alla scrittura di Javascript in un browser.

Ecco una raccolta di collegamenti finora e alcuni suggerimenti dal thread

Giusto per la cronaca, adoro Lua e l'ho già incorporato nei motori di gioco circa 5 volte al lavoro.

Tuttavia ora questo è un progetto per hobby e penso che Javascript sia conosciuto dalla maggior parte degli sviluppatori web e poiché è sviluppatore ECMA, Flash e Flex, un motore di gioco che utilizza Javascript e XML per lo scripting sarebbe più facile da usare e soddisferebbe un pubblico più ampio base di utenti (e che finora non ha avuto la possibilità di usare le proprie abilità per i giochi) rispetto a quella con Lua (e ce ne sono un sacco in giro!).

Anche per la cronaca andrò con V8 su questo, soprattutto perché mi piace il suo stile C++.

È stato utile?

Soluzione

SpiderMonkey di Mozilla è abbastanza semplice e ben documentato.È un'API C, ma è semplice inserirla in C++.Può essere compilato per essere thread-safe, il che è utile per i giochi poiché probabilmente vorrai avere la logica principale in un thread e la logica dell'interfaccia utente in un secondo thread.

Il V8 di Google potrebbe essere una buona scelta, dato che stai usando C++, ma non ne ho ancora esperienza.Secondo la documentazione (grazie a Daniele Giacomo), V8 non è thread-safe, anche se ciò potrebbe cambiare in futuro.

C'è anche Pesce scoiattolo di WebKit, ma non sono riuscito a trovarne una versione autonoma mentre cercavo prima.

Altri suggerimenti

Ho provato sia SpiderMonkey che V8.Con SpiderMonkey non sono riuscito a far funzionare nulla.Non sono riuscito nemmeno a compilare gli esempi su mozilla.org.

V8 ha funzionato immediatamente e ho ottenuto alcune interazioni di base C++ <-> Javascript abbastanza rapidamente.Esistono alcuni elenchi Google di persone che utilizzano V8 e ho già trovato la risposta alla maggior parte delle mie domande lì.

Credo che al momento la v8 funzioni solo su processori x86, x64 e arm.Il che potrebbe essere uno svantaggio.

Per quanto riguarda la sicurezza del thread, da 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.

Puoi leggere di più nel file sorgente (sembra la documentazione di doxygen, ma sembra che non l'abbiano inserita da nessuna parte).

Aggiornamento: Quel commento è stato rimosso, probabilmente qualche tempo fa.Sembra che la v8 ora abbia un file Isolate oggetto che rappresenta un'istanza del motore.Un singolo Isolate l'istanza può essere utilizzata solo in un singolo thread alla volta, ma altro Isolate le istanze possono essere utilizzate in altri thread contemporaneamente.

Java Script è davvero il linguaggio giusto per il tuo gioco?Molti giochi là fuori utilizzano il file Lua linguaggio di programmazione per lo scripting.È facile da integrare, è molto piccolo, si compila su quasi tutte le piattaforme ed è facile da imparare.

Questo è un po' fuori tema, ma pensare fuori dagli schemi può essere importante per fare le cose per bene.

IL segno di riferimento quello che è emerso quando il V8 è entrato in scena per la prima volta e che ha mostrato che il V8 è più veloce del 1000% (o qualcosa del genere) rispetto ad altri motori è stato fortemente orientato a favorire i motori che erano bravi nella ricorsione.Se il tuo codice utilizza molta ricorsione, la V8 potrebbe darti un vantaggio significativo, in termini di velocità.Per quanto riguarda il materiale web del "mondo reale" (almeno attualmente), SquirrelFish Extreme sembra essere il vincitore a mani basse al momento (vedi il mio post sul blog sull'argomento per i risultati dei miei test informali).

Come altri hanno sottolineato, la facilità di integrazione e la qualità della documentazione potrebbero prevalere sulla pura velocità.Non significa jack se non spedisci!

Quando parli di un motore di scripting e di C++ potresti anche prendere in considerazione chaiscript.È simile allo script ecma (~Javascript) ed è molto facile da incorporare in C++.

Venditore dalla pagina web:

...ChaIvisipt, d'altra parte, è stato progettato da zero con l'integrazione con C ++ in mente....Chaoccript non ha meta-compocner, nessuna dipendenza della biblioteca, nessun requisito di sistema di costruzione e nessun bagaglio ereditario di alcun tipo.AT CAN lavora senza soluzione di continuità con tutte le funzioni C ++ che esponi ad esso.Non deve essere detto esplicitamente su qualsiasi tipo, è incentrato sulla funzione.

Con ChaiScript puoi letteralmente iniziare a sceneggiare l'applicazione aggiungendo tre righe di codice al programma e non modificando affatto i passaggi di build.

Aspetterei che uscisse TraceMonkey, la prossima evoluzione di SpiderMonkey.Più veloce e meglio progettato.(Utilizza il codice donato da Adobe Flash).

Tracemonkey è orgoglioso di rendere le azioni ripetitive molto più veloci ottimizzando in modo aggressivo la struttura in fase di esecuzione in base all'utilizzo effettivo, il che dovrebbe essere utile per l'aumento del gioco.

Prova Javascript .NET:

http://javascriptdotnet.codeplex.com/

Implementa Google V8.È possibile compilare ed eseguire Javascript direttamente dal codice .NET e fornire anche oggetti CLI da utilizzare dal codice Javascript.E V8 è probabilmente il miglior motore mai creato in termini di prestazioni, genera codice nativo da Javascript.

Potresti anche voler dare un'occhiata V8 da Google.È piuttosto nuovo, però.

Terrei d'occhio la v8 poiché è un motore Javascript estremamente veloce e sono sicuro che svilupperà il supporto multipiattaforma man mano che raggiungerà la maturità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top