Es gibt nichts Schöneres als die Routine, eine Variable zu optimieren, Code zu kompilieren, der einige Minuten dauert, den Code auszuführen, zu erkennen, dass Ihre Optimierung in die falsche Richtung geht, und den Vorgang erneut zu wiederholen.
Ich möchte während einer laufenden Sitzung mit meiner Spielelogik interagieren. Wie haben Sie das gemacht?
Ich wäre offen für Lösungen für iOS, C / C ++ und C # / XNA.
quelle
In C / C ++ besteht ein einfacher Trick darin, das Tweakable in eine statische Variable zu setzen, einen Haltepunkt auszulösen, das Static im Debugger zu ändern und es bis zum Beenden beizubehalten.
quelle
Die HTTP-Protokollierung ist eine große Hilfe und nicht schwer in Betrieb zu nehmen. Sie können sogar die Google App Engine verwenden, um dies schnell zum Laufen zu bringen. Daten sind immer nützlich.
Skripte und XML- Dateien können im laufenden Betrieb neu geladen werden und erfordern kein Zurücksetzen. Lassen Sie sie scheitern, ohne das Spiel zu beeinträchtigen. Dies gibt Künstlern, Testern und Designern viel Kraft.
In-Game-Debug-Menü Ein einfaches Menü, mit dem Sie als Kind das Spiel starten und mit den Engine- und Game-Slidern einfrieren können. So können Sie zur Laufzeit die Schlüsselnummern optimieren und möglicherweise eine oder zwei Debug-Funktionen oder Info-Dumps ausführen.
Ich liebe auch ASYNC-Sockets, wie in Davids Antwort erwähnt
Einfach zu bedienen Ihr Spieleteam muss in der Lage sein, diese Tools zu erweitern und sie sehr einfach zu verwenden, sonst werden sie einfach nicht verwendet.
quelle
Ich weiß, Sean James hat es bereits gesagt . Aber im Ernst, Visual Studio (speziell die Debugging-Tools) ist großartig dafür.
Heutzutage verwende ich C ++ nicht oft, daher bin ich mir nicht sicher, wie gut dies dort zutrifft. Aber für C # (einschließlich in C # Express) haben Sie:
Und das könnte dich umhauen (es hat mich umgehauen, als ich davon erfuhr):
Das Direktfenster ist eigentlich schwer zu finden (es befindet sich im Menü Debug / Windows).
Der einzige große Nachteil bei der Verwendung des Visual C # -Debuggers ist, dass er keine Änderungswünsche hat
const
. Also mache ich normalerweise nur meine Gameplay-bezogenen Wertestatic
während ich sie optimiere.(Außerdem hilft es sehr, zwei Monitore zu haben.)
Jetzt muss ich zugeben, dass die obige Methode das Anhalten Ihrer Bewerbung beinhaltet - was für einige besonders schwierige Dinge unbefriedigend langsam sein kann.
In diesen seltenen Fällen muss ich (in XNA) einfach ein bisschen Code hacken (wahrscheinlich mithilfe von Bearbeiten und Fortfahren, wie oben), um ihn zu greifen
Keyboard.GetState().IsKeyDown()
(tatsächlich habe ich einen einfacher zu tippenden Wrapper dafür) und den Code anzupassen Wert per Tastendruck. Etwas Komplizierteres ist die Mühe nicht wert.In der Praxis ist das Visualisieren für mich in der Regel weitaus wichtiger Werte in Echtzeit (statt zu modifizieren). Dafür habe ich eine nette kleine Klasse, die Linien und Text puffern kann, um am Ende des Rahmens gezeichnet zu werden. Es ist auch nützlich für schnelles Prototyping.
(Und wieder einmal ist es schön, diese Visualisierungen zur Laufzeit bearbeiten und fortsetzen zu können.)
(Quelle: andrewrussell.net )
( von hier )
Ich fürchte, ich habe momentan keine "nette" Quelle zum Veröffentlichen (vielleicht später). Grundsätzlich handelt es sich jedoch nur um eine Liste von Zeilen (für diese runde Zeilenbibliothek) und Zeichenfolgen (für den in XNA integrierten SpriteBatch). Machen Sie es einfach
public static
irgendwo und zeichnen Sie alles mit einer geeigneten Transformation, so dass alles im "Weltraum" erscheint (und löschen Sie dann die Listen für das nächste Bild).quelle
Das Schreiben eines einfachen Reflektionssystems für C / C ++ ist ziemlich trivial. Auf diese Weise können Sie alle Variablen im Spiel durchsuchen (sei es mit einem Netzwerk-Tool, einer Tastatur oder einem Joypad) und nach Herzenslust ändern. Es funktioniert für mich, aber alle obigen Antworten sind gleichermaßen gültig.
Bearbeitet, um hinzuzufügen: In diesem Thread geht es jetzt um das Optimieren und nicht um das Debuggen gemäß dem Thread-Titel.
quelle
Eine Lösung, die ich in mehreren Studios gesehen habe, ist eine externe Debugging-App, die über das Netzwerk an Ihr Programm angehängt wird. Diese App zeigt bestimmte exponierte Variablen und ermöglicht es Ihnen, sie in Echtzeit zu bearbeiten. Beim Hinzufügen neuer Variablen müssen dem Spielcode einige Makros hinzugefügt werden.
Die anfängliche Einrichtung der spielseitigen Makros, des Server / Client-Protokolls (die Lösungen, die ich gerade gesehen habe, serialisieren xml hin und her) und des Client-Schreibens ist groß. Dies ist jedoch äußerst nützlich, da Sie mithilfe des Netzwerks für die Kommunikation auf jeder Plattform arbeiten können.
quelle
Binden Sie das Laden und Lesen der Variablen in eine Textdatei und starten Sie sie mit einer bestimmten Tastenkombination oder einem Befehl von der Konsole aus.
quelle