Modifiche e impostazioni: modifica e persistenza delle variabili di runtime


19

La maggior parte delle aziende ha un editor o un sistema di controllo variabile per modificare le cose nei giochi, ma ci sono soluzioni middleware a questo problema? Ho scritto due di questi sistemi in passato e ho lavorato con cinque, forse sei diversi, ma nessuno di questi era disponibile.

Ognuna di queste soluzioni coltivate in casa ha avuto problemi, che vanno dal dover continuare a cercare valori, al non essere in grado di salvare lo stato attuale delle variabili.

Esistono librerie / app di controllo per variabili di configurazione / runtime mature?

Generalmente codifico in C ++, ma penso che un editor di impostazioni / variabili maturo dovrebbe probabilmente essere basato su socket (e quindi in una certa misura dal linguaggio agnostico) poiché tutto l'hardware di sviluppo attuale, a parte le cose di Nintendo, fornisce un meccanismo per parlare con i server. Anche l'implementazione del codice dovrebbe essere piuttosto semplice (mi piace l'articolo hot_var / TweakableConstants condiviso da Oskar, ma non è un pacchetto)

Risposte:


8

Mi piace quello che Noel ha proposto sul suo blog. Un tweaker variabile basato su telnet . Utilizzando telnet è stato in grado di utilizzare qualsiasi client telnet per modificare le variabili. Successivamente hanno costruito una gui attorno al protocollo. Sembra sufficientemente semplice, che probabilmente non vale una libreria di middleware ma guardare il suo codice potrebbe essere utile.

Non sono d'accordo con il suo sentimento anti-Lua comunque. Una console Lua remota sembra semplicemente fantastica.


Hanno usato telnet per le variabili di tweak anche sulla MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan

3
Perché Telnet HTTP / HTML, amico! HTTP è un protocollo molto semplice e può essere facilmente incorporato in un gioco - l'ho già fatto in precedenza, era ben al di sotto di mille righe di codice.
ZorbaTHut,

3
Direi che Telnet fa abbastanza bene il lavoro ed è molto meno complesso. Potresti farlo in 100 righe di codice anziché in 1000. E consente anche il push degli aggiornamenti piuttosto che dover effettuare polling e pull. Ma se hai bisogno di HTTP per qualsiasi altro scopo nel tuo gioco, sono d'accordo che valga la pena usarlo anche qui.
Kylotan,

5

Forse l'idea di Costanti modificabili soddisfa le tue esigenze. È così utilizzabile infatti che penseresti che avresti bisogno di una soluzione complessa per avere un controllo efficace delle variabili di runtime, ma in realtà l'implementazione è quasi troppo semplice. Anche la discussione originale su questa tecnica è una lettura interessante.

Esempio:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

La Hmacro si espande in qualcosa del genere HotValue(x, __FILE__, __LINE__, __COUNTER__). Ciò registra il valore in alcuni registri globali. Quindi avere una funzione come RefreshHotValues()quella che si chiama a intervalli regolari. La funzione cerca ogni voce nel registro, analizza il file sorgente specifico e ricarica il valore attivo.

Quando modifichi il codice sorgente effettivo, hai la persistenza proprio lì.

Ovviamente questo non funzionerà dove H()non viene valutato ogni frame, ma ci sono modi per risolverlo come discusso qui .

Potresti espandere questa idea a una soluzione basata su socket, forse. Potrebbe esserci un notevole sovraccarico di prestazioni per chiamare HotValue()ogni frame, ma poiché puoi facilmente compilare la macro sostituendola completamente con la costante, questo non è un problema.


2
@Kylotan: ti manca il punto. Stai modificando il codice sorgente effettivo, che viene analizzato in fase di esecuzione. La persistenza è attraverso le fonti modificate.
Oskar N.

Sì, in qualche modo me lo sono perso sfogliando l'articolo. Eliminerò il mio commento e rileggerò!
Kylotan,

3
Potrei essere solo io, ma questa tecnica sembra ... icky. Penso che sia perché ho passato così tanto tempo a odiare i numeri magici e questo funzionerà solo per i numeri magici. Preferirei vedere il colore chiaro far parte di un file di configurazione o di script. La magia arriva con la capacità di caricare a caldo le risorse.
deft_code

@caspin: puoi usare variabili semplici e invece hai H(int, myvar, 5)e quando il file cambia sostituisci il myvarin memoria. Vedi mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.

1

AntTweakBar è davvero utile per quello che vuoi fare, tuttavia, il più delle volte, vorresti avere metodi che 'compilano' in rilascio con alcune macro o simili.



0

La gestione delle impostazioni sembra essere una di quelle cose che sono state rifatte da zero per ogni gioco, probabilmente a causa di quanto sia relativamente semplice e dell'alta variabilità nei tipi di impostazioni necessarie. Supponendo di avere una buona configurazione di back-end di archiviazione (SQL / qualunque cosa), è possibile codificare una soluzione affidabile per la gestione delle impostazioni in un giorno o due, quindi non sembra esserci una reale necessità aziendale per una soluzione middleware. Metterlo in cima a qualunque cosa tu usi per la memorizzazione delle informazioni dei giocatori è che penso che il modo migliore per andare nella maggior parte dei casi.


1
Non si tratta di informazioni sulle impostazioni, si tratta di modificare le variabili di runtime per scopi di debug o di gioco.

Molti tipi di variabili di runtime per scopi di debug e di gioco hanno senso archiviare in una sorta di back-end persistente. Ciò consente di modificarli su un intero sistema durante la distribuzione. SQL è solo un esempio di back-end, è possibile applicare le patch a un file su disco o un numero qualsiasi di altri metodi.
Ben Zeigler,

1
Il problema è farli cambiare in tempo reale. Ciò probabilmente implica l'impostazione di una sorta di trigger sul DB e qualcosa nel gioco in grado di gestire quel trigger e rileggere i valori in modo asincrono mentre il gioco continua a funzionare. Non insormontabile, ma neanche tremendamente semplice.
Kylotan,

Il codice che gestisce quel trigger DB sarebbe il codice che Richard sta cercando ed è la parte interessante / riutilizzabile. Spostare le costanti in un DB piuttosto che nel filesystem o in un altro strumento non fa apparire magicamente quel codice e probabilmente lo rende solo più complicato.

-1

Ultimamente ho pensato a una cosa del genere, e penso che sarebbe un ottimo candidato per un'app Android abbinata a una piccola libreria in qualsiasi lingua tu voglia . L'app sarebbe un set personalizzabile di pulsanti, pulsanti, menu a discesa, ecc. (Qualsiasi widget desiderato) e invierebbe le azioni via WLAN (o USB se si desidera complicare le cose) alla libreria. La libreria avrebbe generato un thread separato dal gameplay e avrebbe saputo quali controlli sul telefono Android corrispondevano a quali variabili nel gioco (le avresti impostate nel tuo codice di avvio) e avrebbero una connessione all'app Android.

Quindi, pasticciare con il tuo gioco è facile come toccare le cose sul telefono. Potresti anche avere alcune caselle di testo sul telefono che mostrano valori variabili in tempo reale dal gioco, oppure potresti avere la libreria in avanti stdino stderrverso un'area di testo scorrevole sul telefono. Le opzioni sono infinite!

L'unica vera preoccupazione è con la velocità. Se la velocità e il tempo di reazione sono cruciali, allora agganceresti il ​​telefono tramite USB e adb (debugger Android) supporta l'inoltro delle porte tramite USB al telefono. Ma per il resto, la WLAN avrebbe solo un ritardo molto piccolo, che a mio avviso sarebbe molto accettabile.

Non credo sia stata scritta una cosa del genere, ma ho preso in seria considerazione la possibilità di scriverla. (Non sono ancora abbastanza avanti nello sviluppo dei miei giochi per averne ancora bisogno)

Naturalmente, quelli di voi che sono utenti Apple possono probabilmente fare lo stesso con i propri dispositivi iDevices. Personalmente trovo che lo sviluppo di iOS sia un ordine di grandezza più difficile dello sviluppo di Android e, naturalmente, l'app di cui sopra potrebbe essere facilmente pubblicata sul mercato Android per una facile distribuzione mentre Apple probabilmente non consentirebbe uno strumento di sviluppo nell'app store, quindi io sentire la piattaforma Android che si adatta meglio a questo strumento.


Questo sarebbe dolce in un ambiente d'ufficio. Cammina per parlare con un artista, connettiti e inizia a giocherellare con il gioco di corsa del designer vicino mentre sta cercando di organizzare alcuni incontri ...
dash-tom-bang

1
Non capisco il vantaggio di averlo sul tuo telefono piuttosto che sul computer con cui stai effettivamente sviluppando.
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.