Tweaking and Settings - Modification et persistance des variables d'exécution


19

La plupart des entreprises ont un éditeur ou un système de contrôle variable pour peaufiner les choses dans les jeux, mais existe-t-il des solutions middleware à ce problème? J'ai moi-même écrit deux de ces systèmes dans le passé et travaillé avec cinq, peut-être six systèmes différents, mais aucun n'était disponible.

Chacune de ces solutions maison avait des problèmes, allant de devoir continuer à rechercher des valeurs, à ne pas pouvoir sauvegarder l'état actuel des variables.

Existe-t-il des bibliothèques / applications de contrôle des variables de configuration / d'exécution matures?

Je code généralement en C ++, mais je pense qu'un éditeur de paramètres / variables mature serait probablement basé sur un socket (et donc un langage indépendant dans une certaine mesure) car tout le matériel de développement actuel, à l'exception de Nintendo, fournit un mécanisme pour parler aux serveurs. L'implémentation du code devrait également être assez simple (j'aime bien l'article hot_var / TweakableConstants partagé par Oskar, mais ce n'est pas un package)

Réponses:


8

J'aime ce que Noel a proposé sur son blog. Un tweaker variable basé sur telnet . En utilisant telnet, il a pu utiliser n'importe quel client telnet pour éditer les variables. Plus tard, ils ont construit une interface graphique autour du protocole. Cela semble suffisamment simple, qu'il ne vaut probablement pas la peine d'avoir une bibliothèque de middleware mais regarder son code pourrait être utile.

Je suis cependant en désaccord avec son sentiment anti-Lua. Une console Lua à distance semble tout simplement géniale.


Ils ont également utilisé telnet pour les variables de réglage sur MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan

3
Pourquoi Telnet? HTTP / HTML, mec! HTTP est un protocole très simple et peut être facilement intégré dans un jeu - je l'ai déjà fait, il faisait bien moins de mille lignes de code.
ZorbaTHut

3
Je dirais que Telnet fait assez bien le travail et est beaucoup moins complexe. Vous pouvez le faire en 100 lignes de code plutôt qu'en 1000. Et cela permet également de pousser les mises à jour plutôt que d'avoir à les interroger et à les extraire. Mais si vous avez besoin de HTTP à d'autres fins dans votre jeu, je conviens que cela vaut la peine de l'utiliser ici aussi.
Kylotan

5

Peut-être que l'idée de constantes ajustables correspond à vos besoins. Il est tellement utilisable en fait que vous penseriez avoir besoin d'une solution complexe pour avoir un contrôle efficace des variables d'exécution, mais en réalité l'implémentation est presque trop simple. La discussion originale de cette technique est également une lecture intéressante.

Exemple:

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

La Hmacro se développe en quelque chose comme HotValue(x, __FILE__, __LINE__, __COUNTER__). Cela enregistre la valeur dans un registre global. Ensuite, ayez une fonction comme RefreshHotValues()celle que vous appelez à intervalles réguliers. La fonction recherche chaque entrée dans le registre, analyse le fichier source spécifique et recharge la valeur chaude.

Lorsque vous modifiez le code source réel, vous avez la persistance là.

Évidemment, cela ne fonctionnera pas là où H()n'est pas évalué chaque trame, mais il existe des moyens de résoudre ce problème, comme indiqué ici .

Vous pourriez peut-être étendre cette idée à une solution basée sur un socket. Il pourrait y avoir un surdébit de performances important pour appeler HotValue()chaque trame, mais comme vous pouvez très facilement compiler la macro en la remplaçant complètement par la constante, ce n'est pas un problème.


2
@Kylotan: Vous manquez le point. Vous modifiez le code source réel, qui est analysé au moment de l'exécution. La persistance passe par les sources modifiées.
Oskar N.

Ouais, d'une manière ou d'une autre, j'ai raté cela en parcourant l'article. Je vais supprimer mon commentaire et relire!
Kylotan

3
Je suis peut-être juste moi, mais cette technique me semble icky. Je pense que c'est parce que j'ai passé tellement de temps à détester les nombres magiques et cela ne fonctionnera que pour les nombres magiques. Je préfère voir la couleur claire faire partie d'une configuration ou d'un fichier de script. La magie vient de la possibilité de charger des ressources à chaud.
deft_code

@caspin: vous pouvez utiliser des variables simples et, à la place, avoir H(int, myvar, 5)et lorsque des modifications de fichier sont remplacées, vous remplacez le myvaren mémoire. Voir mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.

1

AntTweakBar est vraiment utile pour ce que vous voulez faire, cependant, la plupart du temps, vous voudriez avoir des méthodes qui «compilent» en version avec des macros ou similaires.



0

La gestion des paramètres semble être l'une de ces choses qui ont été refaites à zéro pour chaque jeu, probablement en raison de sa relative simplicité et de la grande variabilité des types de paramètres nécessaires. En supposant que vous disposez d'une configuration de backend de stockage décente (SQL / autre), vous pouvez coder une solution robuste pour la gestion des paramètres en un jour ou deux, de sorte qu'il ne semble pas y avoir vraiment de besoin réel pour une solution middleware. Je pense que la meilleure façon de procéder dans la plupart des cas est de le maîtriser par-dessus tout ce que vous utilisez pour le stockage des informations sur les joueurs.


1
Il ne s'agit pas d'informations sur les paramètres, il s'agit de modifier les variables d'exécution à des fins de débogage ou de gameplay.

De nombreux types de variables d'exécution à des fins de débogage et de gameplay ont du sens à stocker dans une sorte de back-end persistant. Cela permet de les modifier sur l'ensemble d'un système lors du déploiement. SQL n'est qu'un exemple de back-end, vous pouvez patcher les informations dans un fichier sur le disque ou un certain nombre d'autres méthodes.
Ben Zeigler

1
Le problème est de les amener à changer en temps réel. Cela implique probablement la mise en place d'une sorte de déclencheur sur la base de données et quelque chose dans le jeu qui peut gérer ce déclencheur et relire les valeurs de manière asynchrone pendant que le jeu continue de fonctionner. Pas insurmontable, mais pas terriblement simple non plus.
Kylotan

Le code qui gère ce déclencheur DB serait le code que Richard recherche, et c'est la partie intéressante / réutilisable. Déplacer les constantes vers une base de données plutôt que le système de fichiers ou un autre outil ne fait pas apparaître ce code comme par magie, et le rend probablement plus compliqué.

-1

J'ai pensé à une telle chose ces derniers temps, et je pense que ce serait un excellent candidat pour une application Android associée à une petite bibliothèque dans la langue que vous souhaitez . L'application serait un ensemble personnalisable de boutons, de bascules, de listes déroulantes, etc. (n'importe quel widget que vous voulez), et elle enverrait les actions via WLAN (ou USB si vous vouliez compliquer les choses) à la bibliothèque. La bibliothèque aurait engendré un fil distinct du gameplay et saurait quels contrôles sur le téléphone Android correspondent à quelles variables du jeu (vous les auriez définis dans votre code de démarrage) et aurait une connexion à l'application Android.

Ensuite, jouer avec votre jeu est aussi simple que de toucher des choses sur votre téléphone. Vous pouvez même avoir des zones de texte sur le téléphone qui affichent les valeurs variables en temps réel du jeu, ou vous pouvez avoir la bibliothèque en avant stdinou stderrvers une zone de texte défilante sur le téléphone. Les options sont illimitées!

Le seul vrai souci est la vitesse. Si la vitesse et le temps de réaction sont cruciaux, il vous suffit de brancher le téléphone via USB et adb (débogueur Android) prend en charge les ports de transfert via USB vers le téléphone. Mais sinon, le WLAN n'aurait qu'un très petit retard qui, je pense, serait tout à fait acceptable à cet effet.

Je ne pense pas qu'une telle chose que ce qui précède ait été écrite, mais j'ai sérieusement envisagé de l'écrire. (Je n'ai tout simplement pas assez avancé dans le développement de mes propres jeux pour en avoir besoin)

Bien sûr, ceux d'entre vous qui sont des utilisateurs d'Apple peuvent probablement faire de même avec vos iDevices. Personnellement, je trouve que le développement iOS est beaucoup plus difficile que le développement Android, et bien sûr, l'application ci-dessus pourrait facilement être publiée sur le marché Android pour une distribution facile alors qu'Apple ne permettrait probablement pas un outil de développement dans l'App Store, donc je sentir que la plate-forme Android convient mieux à cet outil.


Ce serait doux dans un environnement de bureau. Promenez-vous pour parler à un artiste, connectez-vous et commencez à jouer avec le jeu de course du designer voisin pendant qu'il essaie d'organiser des rencontres ...
dash-tom-bang

1
Je ne comprends pas l'avantage de l'avoir sur votre téléphone plutôt que sur l'ordinateur avec lequel vous effectuez le développement.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.