Optimierungen und Einstellungen - Laufzeitvariable ändern und beibehalten

19

Die meisten Unternehmen haben einen Editor oder ein variables Steuerungssystem, um Dinge in Spielen zu optimieren. Gibt es jedoch Middleware-Lösungen für dieses Problem? Ich habe in der Vergangenheit selbst zwei solcher Systeme geschrieben und mit fünf, vielleicht sechs verschiedenen Systemen gearbeitet, aber keines davon war von der Stange.

Jede dieser selbst entwickelten Lösungen hatte Probleme, angefangen von der Notwendigkeit, ständig nach Werten zu suchen, bis hin zur Unfähigkeit, den aktuellen Status der Variablen zu speichern.

Gibt es ausgereifte Config / Runtime-Variablen-Steuerungsbibliotheken / Apps?

Ich programmiere im Allgemeinen in C ++, aber ich denke, dass ein ausgereifter Editor für Einstellungen / Variablen wahrscheinlich sockelbasiert ist (und daher in gewissem Maße sprachunabhängig ist), da jede aktuelle Entwicklungshardware mit Ausnahme von Nintendo-Sachen einen Mechanismus für die Kommunikation mit Servern bietet. Die Codeimplementierung müsste auch recht einfach sein (ich mag den Artikel hot_var / TweakableConstants, der von Oskar geteilt wird, aber es ist kein Paket)

Richard Fabian
quelle

Antworten:

8

Mir gefällt, was Noel auf seinem Blog vorgeschlagen hat. Ein Telnet-basierter Variablen-Tweaker . Mit Telnet konnte er jeden Telnet-Client zum Bearbeiten der Variablen verwenden. Später bauten sie ein GUI um das Protokoll. Es scheint hinreichend einfach zu sein, dass es wahrscheinlich keine Middleware-Bibliothek wert ist, aber einen Blick auf seinen Code kann nützlich sein.

Ich bin jedoch nicht mit seiner Anti-Lua-Einstellung einverstanden. Eine entfernte Lua-Konsole scheint einfach fantastisch zu sein.

deft_code
quelle
Sie verwendeten Telnet auch für die Tweak-Variablen in der MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan
3
Warum Telnet? HTTP / HTML, Alter! HTTP ist ein sehr einfaches Protokoll und kann leicht in ein Spiel eingebettet werden - ich habe es schon einmal gemacht, es war weit unter tausend Zeilen Code.
ZorbaTHut
3
Ich würde sagen, dass Telnet die Arbeit ziemlich gut macht und viel weniger komplex ist. Sie können dies in 100 statt in 1000 Codezeilen tun. Außerdem können Aktualisierungen übertragen werden, anstatt sie abrufen und abrufen zu müssen. Aber wenn Sie HTTP für einen anderen Zweck in Ihrem Spiel benötigen, würde ich zustimmen, dass es sich lohnt, es auch hier zu verwenden.
Kylotan,
5

Vielleicht passt die Idee von Tweakable Constants zu Ihren Bedürfnissen. Es ist in der Tat so nützlich, dass Sie denken würden , Sie bräuchten eine komplexe Lösung, um eine effektive Steuerung der Laufzeitvariablen zu erreichen, aber in Wirklichkeit ist die Implementierung fast zu einfach. Die ursprüngliche Diskussion dieser Technik ist auch eine interessante Lektüre.

Beispiel:

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

Das HMakro erweitert sich zu so etwas wie HotValue(x, __FILE__, __LINE__, __COUNTER__). Dadurch wird der Wert in einer globalen Registrierung registriert. Dann haben Sie eine solche Funktion RefreshHotValues(), die Sie in regelmäßigen Abständen aufrufen. Die Funktion sucht nach jedem Eintrag in der Registrierung, analysiert die jeweilige Quelldatei und lädt den aktuellen Wert neu.

Wenn Sie den eigentlichen Quellcode ändern, bleiben Sie dort bestehen.

Offensichtlich funktioniert dies nicht, wenn H()nicht jeder Frame ausgewertet wird, aber es gibt Möglichkeiten, dies wie hier beschrieben zu lösen .

Sie könnten diese Idee vielleicht auf eine Socket-basierte Lösung ausweiten. Das Aufrufen HotValue()jedes Frames kann einen erheblichen Performance-Overhead bedeuten. Da Sie das Makro jedoch sehr einfach kompilieren können, indem Sie es vollständig durch die Konstante ersetzen, ist dies kein Problem.

Oskar N.
quelle
2
@ Kylotan: Sie verpassen den Punkt. Sie ändern den eigentlichen Quellcode, der zur Laufzeit analysiert wird. Die Persistenz ist durch die geänderten Quellen gegeben.
Oskar N.
Ja, irgendwie habe ich das beim Überfliegen des Artikels verpasst. Ich werde meinen Kommentar löschen und erneut lesen!
Kylotan
3
Ich könnte nur ich selbst sein, aber diese Technik fühlt sich ... icky an. Ich denke, das liegt daran, dass ich so viel Zeit damit verbracht habe, magische Zahlen zu hassen, und das wird nur für magische Zahlen funktionieren. Ich würde lieber sehen, dass die klare Farbe Teil einer Konfigurations- oder Skriptdatei ist. Die Magie, die mit der Fähigkeit verbunden ist, Ressourcen heiß zu laden.
deft_code
@caspin: Sie können einfache Variablen verwenden und stattdessen H(int, myvar, 5)und wenn sich die Datei ändert, ersetzen Sie die myvarim Speicher. Siehe mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.
1

AntTweakBar ist wirklich nützlich für das, was Sie tun möchten. Meistens möchten Sie jedoch Methoden haben, die in der Veröffentlichung mit einigen Makros oder Ähnlichem „kompiliert“ werden.

DrDeth
quelle
0

Das Einstellungsmanagement scheint eines der Dinge zu sein, die für jedes Spiel von Grund auf überarbeitet wurden, wahrscheinlich aufgrund der relativ einfachen Bedienung und der großen Variabilität der benötigten Einstellungen. Vorausgesetzt, Sie haben ein angemessenes Speicher-Backend-Setup (SQL / was auch immer), können Sie innerhalb von ein oder zwei Tagen eine robuste Lösung für das Einstellungsmanagement programmieren, sodass für eine Middleware-Lösung anscheinend kaum echte Geschäftsanforderungen bestehen. Ich denke, es ist in den meisten Fällen der beste Weg, es auf das zu setzen, was Sie für die Speicherung von Spielerinformationen verwenden.

Ben Zeigler
quelle
1
Hier geht es nicht um Einstellungsinformationen, sondern darum, Laufzeitvariablen für Debug- oder Gameplay-Zwecke zu optimieren.
Viele Arten von Laufzeitvariablen für Debugging- und Gameplay-Zwecke sind sinnvoll, um sie in einem beständigen Back-End zu speichern. Auf diese Weise können Sie sie bei der Bereitstellung systemweit ändern. SQL ist nur ein Beispiel für ein Back-End. Sie können die Informationen auf eine Datei auf der Festplatte oder eine beliebige andere Methode patchen.
Ben Zeigler
1
Das Problem ist, dass sie sich in Echtzeit ändern. Das beinhaltet wahrscheinlich das Einrichten einer Art Trigger für die Datenbank und etwas im Spiel, das diesen Trigger verarbeiten und die Werte asynchron erneut lesen kann, während das Spiel weiter läuft. Nicht unüberwindlich, aber auch nicht schrecklich einfach.
Kylotan,
Der Code, der diesen DB-Trigger verwaltet, ist der von Richard gesuchte Code und der interessante / wiederverwendbare Teil. Das Verschieben der Konstanten in eine Datenbank anstelle des Dateisystems oder eines anderen Tools lässt diesen Code nicht magisch erscheinen und macht ihn wahrscheinlich nur komplizierter.
-1

Ich habe in letzter Zeit tatsächlich über so etwas nachgedacht, und ich denke, es wäre ein großartiger Kandidat für eine Android-App, die mit einer kleinen Bibliothek in einer beliebigen Sprache gepaart ist . Die App besteht aus einer Reihe anpassbarer Schaltflächen, Schaltflächen, Dropdowns usw. (jedes gewünschte Widget) und sendet die Aktionen über WLAN (oder USB, wenn Sie etwas komplizieren möchten) an die Bibliothek. Die Bibliothek hätte einen separaten Thread aus dem Gameplay erzeugt und gewusst, welche Steuerelemente auf dem Android-Handy welchen Variablen im Spiel entsprechen (Sie würden sie in Ihrem Startcode festlegen) und eine Verbindung zur Android-App haben.

Dann ist das Durcheinander mit Ihrem Spiel so einfach wie das Berühren von Dingen auf Ihrem Telefon. Sie könnten sogar einige Textfelder auf dem Telefon haben, die variable Echtzeitwerte aus dem Spiel anzeigen, oder Sie könnten die Bibliothek weiterleiten stdinoder stderrzu einem Bildlauf-Textbereich auf dem Telefon. Die Möglichkeiten sind grenzenlos!

Das einzig wahre Problem ist die Geschwindigkeit. Wenn Geschwindigkeit und Reaktionszeit entscheidend sind, schließen Sie das Telefon einfach über USB an und ADB (Android Debugger) unterstützt die Weiterleitung von Ports über USB an das Telefon. Andernfalls würde WLAN nur eine sehr geringe Verzögerung haben, die meiner Meinung nach für diesen Zweck durchaus akzeptabel wäre.

Ich glaube nicht, dass so etwas geschrieben wurde, aber ich habe stark darüber nachgedacht, es zu schreiben. (Ich bin gerade noch nicht weit genug in die Entwicklung meiner eigenen Spiele gekommen, um sie noch zu benötigen.)

Natürlich können diejenigen von Ihnen, die Apple-Benutzer sind, wahrscheinlich dasselbe mit Ihren iDevices tun. Ich persönlich finde die iOS-Entwicklung um Größenordnungen schwieriger als die Android-Entwicklung, und natürlich könnte die oben genannte App zur einfachen Verbreitung leicht im Android-Markt veröffentlicht werden, wohingegen Apple wahrscheinlich kein Entwicklertool im App Store zulassen würde Ich denke, die Android-Plattform passt besser zu diesem Tool.

Ricket
quelle
Dies wäre in einer Büroumgebung süß. Gehen Sie rüber, um mit einem Künstler zu sprechen, und spielen Sie mit dem Laufspiel des benachbarten Designers, während dieser versucht, einige Begegnungen zu
arrangieren
1
Ich verstehe nicht, welchen Vorteil es hat, wenn es auf Ihrem Telefon und nicht auf dem Computer installiert ist, mit dem Sie gerade entwickeln.