Quale linguaggio di scripting consiglieresti per un progetto di gioco C ++? [chiuso]


14

Con lo scripting qui intendo non solo mettere i dati di configurazione in uno script, ma scriptare parti del progetto come alcuni metodi di classe, testare specifici loop di gioco, ecc. Questo non sarebbe solo per accelerare lo sviluppo, ma consentirebbe anche ai giocatori di vedere alcuni di questi script per modificare alcuni aspetti del gioco.

Un linguaggio come Lua ha alcuni wrapper come luabind, ma quando l'ho usato in passato ha avuto problemi perché non supportava la ridefinizione del metodo in un contesto di eredità.

Quali sono i tuoi suggerimenti su lingua / wrapper da usare o non usare?

Risposte:


9

Videogiochi
con script Lua Motori di gioco con script Lua

Penso che Lua sia lo scatto migliore.

Questo articolo riguarda l'integrazione di Lua e C ++. Dice:

LuaBind è un ottimo prodotto ma per me sembrava troppo complicato. Per uno il codice non è facile da seguire dove sono le classi e gli oggetti. Visto anche che volevo integrare Lua in un'applicazione wxWidgets, usare i template era un po 'no no (puoi leggere i problemi multipiattaforma sul sito wxWidgets).

Esistono molte altre librerie di bind:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

Qual è il miglior wrapper C ++ / Lua?

Basta selezionare e divertiti.


Sì, Lua è piuttosto semplice e molto facile da integrare con C. In realtà, questo è l'obiettivo principale di Lua, essendo un linguaggio incorporato.
Marco Mustapic,

Grazie per il riferimento su LuaBind, forse scavare in altre biblioteche vincolanti mi convincerà per aver ripreso Lua
Frédérick Imbeault,

Suggerirei tuttavia di eseguire solo i tuoi script nel thread principale e di fornire un allocatore di pool per esso se le prestazioni sono un problema.
Kylotan,

5

Mi è piaciuto Chaiscript ; Non lo uso da molto tempo, ma finora sembra abbastanza solido.

A differenza di Python o lua, è costruito da zero per essere utilizzato con C ++. Il processo di rilegatura sembra molto più pulito rispetto a luabind / ecc.

Ecco il riepilogo del sito Web:

ChaiScript è il primo e unico linguaggio di scripting progettato da zero con in mente la compatibilità C ++. È un linguaggio di tipo funzionale incorporato ispirato all'ECMAScript.

ChaiScript è concesso in licenza con licenza BSD.


Interessante. E i test delle prestazioni? Esiste un confronto ChaiScript / Lua / Python?
topright

Abbastanza interessante, ci sono svantaggi / bug / problemi di performance che hai riscontrato finora?
Frédérick Imbeault,

Non ho visto alcun benchmark, ma non ho ancora avuto problemi di prestazioni ... il mio grip principale finora sarebbe che non si converte implicitamente tra tipi numerici (quindi si ottiene un errore se si passa a un int per una funzione che prende un galleggiante, ecc.).
Riley Adams,

1
Solo un FYI, dato che questo commento ha ormai 6 anni - ChaiScript fa conversioni numeriche implicite ora.
lefticus,

5

Consiglierei Lua .
Pitone è molto popolare. Molti motori di gioco in primo piano (Blender, per esempio) lo usano.
C ++ :: Boost ha una libreria per lavorare con Python.
Ho letto di Scoiattolo , ma non l'ho usato.

Puoi leggere questa panoramica di Game Engine . C'è unScripting colonna Puoi vedere che Lua e Python sono i linguaggi di scripting più popolari.


A proposito di Boost, penso che forse sia un'enorme biblioteca e molte cose non sono abbastanza utili in tutti i progetti. In effetti luabind usa molto Boost ed è una delle cose che non mi sono piaciute.
Frédérick Imbeault,

1
Direi che è un vantaggio. Hai molte soluzioni pronte all'uso. E il tuo progetto ha solo 1 dipendenza esterna - Boost. Non molte piccole librerie (che utilizzano stili, approcci, licenze diversi e, a loro volta, possono avere dipendenze implicite esterne) che sono difficili da aggiornare, sincronizzare con il codice e mantenere.
topright

1
E includi solo quelle librerie Boost (intestazioni) di cui hai bisogno. Il boost è enorme, ma non ti interessa finché non avrai bisogno di questo o quello.
topright

E su Python e Lua, ci sono alcuni wrapper per C ++ che ti permettono di ridefinire i metodi di classe, creare nuovi metodi, ecc.? E questa funzione può essere controllata dal codice C ++ (per sicurezza)? Come ho detto, LuaBind fa queste cose ma fallisce in un contesto di eredità, cosa abbastanza comune in un progetto di gioco. I metodi che vorrei ridefinire sono ad esempio, testare il loop di gioco specifico, aggiornare i metodi di entità come il giocatore, aggiornare il metodo del mondo di gioco stesso, ecc.
Frédérick Imbeault,

Lua non ha classi e oggetti, ma possono essere emulati da tabelle. Ecco una libreria Lua per OOP che preferisco: love2d.org/wiki/MiddleClass .
piedi il

4

Perché non crearne uno tuo?

Se hai tempo, pazienza e disponibilità a imparare, puoi sempre provare a sviluppare il tuo motore di scripting con tutte le funzionalità e la sintassi di cui hai bisogno.

vantaggi

  1. Imparerai a conoscere una parte interessante di Informatica.
  2. Sviluppando un motore di scripting "interno", ti dà il controllo completo dall'inizio alla fine, permettendoti di adattare il motore esattamente a ciò di cui hai bisogno.
  3. Se è necessario apportare modifiche in un secondo momento lungo la strada, possono rendere un po 'più semplice la conoscenza degli ingressi e delle uscite della propria base di codice, piuttosto che apprendere gli ingressi e le uscite di qualcun altro.
  4. Non dovrai preoccuparti di mantenere aggiornato il tuo motore con le patch di qualcun altro.

svantaggi

  1. Tempo. Non molte persone ce l'hanno. Se hai bisogno di qualcosa ADESSO, prova un motore già esistente (come uno di quelli già suggeriti).

  2. Velocità. Molti motori di scripting esistenti sono molto veloci: una soluzione personalizzata potrebbe non essere così veloce.

  3. Dimensione della squadra. Molti motori di scripting esistenti hanno team più grandi di persone che lavorano sulla base di codice, siano essi team privati ​​o volontari globali, c'è qualcosa da dire per il codice che viene controllato e ricontrollato da molte altre persone.

  4. Un motore di scripting richiede una certa quantità di pianificazione iniziale per essere efficace. Ci sono molte basi che dovrebbero essere implementate e che potrebbero non avere affatto a che fare con l'attuale motore di scripting.

  5. La tua base / sviluppatori dovrebbero abituarsi al tuo motore di scripting. Questo potrebbe non essere un problema se la sintassi e la funzionalità sono quasi uguali a quelle della maggior parte dei moderni motori di scripting, ma devi solo essere consapevole di ciò.

Questo non è affatto un elenco esaustivo. Se ti ritrovi a dover apportare una grande quantità di modifiche al back-end di un linguaggio di scripting esistente per ottenere la funzionalità desiderata, IMO probabilmente dovresti cercare un altro motore che si adatti alle tue esigenze più da vicino o semplicemente costruirne uno tuo.

Mi rendo conto che alla gente piace buttarsi in giro "pigrizia" e "non reinventare la ruota", ma penso che ci sia qualcosa da dire sull'apprendimento di come queste cose vengono fatte. E un'implementazione specifica probabilmente sarà migliore per il tuo progetto di un'implementazione generica.

"Creazione di sistemi di scripting in C ++" sembra essere l'articolo preferito che le persone condividono quando discutono l'argomento: http://www.gamedev.net/reference/list.asp?categoryid=76


2
Sono d'accordo sul fatto che questo abbia un vantaggio educativo particolare. Tuttavia richiede alcune conoscenze e abilità nella teoria dei linguaggi di programmazione (che molte persone PENSANO di avere) e alcune conoscenze nella teoria dell'informatica. Se questo risponde a domande interessanti per qualcuno, suggerirei questi due libri: amazon.com/gp/product/0136073476/ref=oss_product e amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault

Saresti sorpreso fino a che punto puoi andare senza una reale conoscenza di quelle cose. Molti MUD hanno un linguaggio di scripting che è poco più di un elenco di affermazioni con alcuni hack per abilitare i condizionali, e tuttavia possono ottenere molto da soli.
Kylotan,

Ci sono stato, l'ho fatto. Ho imparato molto sull'analisi, la progettazione del compilatore, le macchine bytecode e tutto il resto. La prossima volta probabilmente userò Lua e lo apprezzerò ancora di più. :)
Kaz Dragon,

2

Ho provato Lua, Python, Scheme e Squirrel. Lua ha lavorato al meglio; ha una comunità più ampia e un supporto migliore rispetto a Squirrel e caratteristiche di memoria e prestazioni molto migliori rispetto a Python. Lo schema ha funzionato molto bene e ha un interprete davvero minuscolo, ma per i designer è stato difficile avvolgere la testa attorno a un linguaggio funzionale.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.