2009-05-14 3 views
1

Ich dachte daran, dies mit C++ zu tun, im Grunde von einem externen Editor oder etwas, das der Programmierer sagen kann: MyClass :: dude = "Hallo" wo "Dude" eine statische ganze Zahl in "MyClass" ist.Alle Variablen in einem Programm zur Laufzeit vom Programmierer änderbar machen, smarte Idee?

Was das Programm zur Laufzeit tut ist Partitioniert die Eingabe zu MyClass :: dude = "Hallo" und findet die Klasse namens "MyClass" und weist die Variable dude als "Hallo".

Die Idee dahinter ist, dass es als eine Art Laufzeit-Debugger fungiert.

Ist das sicher/gesund?

Antwort

3

Ja, dies ist ein typisches Tool, das während der Entwicklung zur Feinabstimmung von Spielen verwendet wird. Es ist nicht so oft etwas, das man eingibt, als einen Bildschirm, auf dem man Variablen mit einem Controller dynamisch verändern kann (das ändert einige Klassenvariablen unter der Haube), aber für PC-Spiele gibt es keinen Grund, warum man nicht könnte. tt etwas ein, besonders wenn es Text ist. Sie müssten natürlich Ihr eigenes System programmieren, in dem eine Klasse einen Teil Ihrer Engine über ihren Namen benachrichtigt und an einige ihrer Variablen gelangt.

+0

Ich schrieb einmal generisches System für die Optimierung aller Arten von Werten im laufenden Betrieb. Es wurde in einigen Spielen verwendet und war sehr hilfreich. Aber zu meiner Überraschung sind generische Tuning-Systeme nicht so üblich. Viele Geschäfte machen nur Werkzeuge für spezielle Fälle wie Partikel. Jetzt arbeite ich in einem großen Projekt, wo es kein so fortgeschrittenes Werkzeug gibt, um so ziemlich alles zu modifizieren, was als änderbar deklariert wird. Auch in meinen persönlichen Hobbyprojekten vermisse ich wirklich solches Werkzeug. Vielleicht gibt es schon ein paar Werkzeuge in der Wildnis.Ich meine etwas, das einfach in bestehende Spiele-Engine eingefügt werden kann. – Virne

+0

Als ich tatsächlich versuchte, ein solches Tool zu suchen, fand ich Folgendes: http://www.antisphere.com/Wiki/tools:anttweakbar Sieht vielversprechend auf den ersten Blick. – Virne

+0

Als ich ein Praktikum bei einer Spielefirma gemacht habe, hatten wir auch so etwas. Es gab eine Konsole und man konnte viel und viel ändern. Sehr hilfreich, besonders für den Tester. –

-1

Die Beschreibung ist nicht sehr klar, können Sie klären? Soll das während des laufenden Programms passieren? Oder würde es das mit der Variable ausführen?

Einer der Unterschiede zwischen C++ und Java ist, dass die Klassennamen im ausführbaren Programm nicht wirklich verwendet werden (es sei denn, sie wurden speziell für das Debuggen kompiliert). Es gibt also keine Möglichkeit, dass ein laufendes C++ Programm eine Variable in diesem Programm findet.

So oder so, ohne dass das "debuggte" Programm mit genügend Informationen und Funktionalität kompiliert wird, ist es nicht wirklich praktisch, aber es ist nicht klar, was Sie zu tun versuchen.

Ich bin auch nicht klar, was das mit der Vererbung zu tun hat (der Titel Ihrer Frage).

2

Ihr typischer Debugger kann dies bereits für alle Basistypen tun.

Das Zuweisen eines Char-String-Werts ist etwas komplizierter, da Speicher für die tatsächliche Zeichenfolge zugewiesen und der Variablen ein Zeiger zugewiesen werden muss.

1

Ihre beste Wette, um etwas wie Boost :: Python zu verwenden und eine echte Skriptsprache zu integrieren. Das ist viel weniger Arbeit als das Erstellen einer eigenen Minisprache. Zum Beispiel wird es bereits wissen, wie man mit Problemaussagen wie "MyClass :: dude =" hallo "umgeht, wo 'dude' eine statische Ganzzahl in 'MyClass' ist."

0

Obwohl ich keine sehr elegante Lösung bin, schließe ich manchmal statische Versionen von Variablen ein, die ich im laufenden Betrieb durch den Debugger ändern muss, um Dinge zu optimieren, dann einfach das entsprechende #define auskommentieren, wenn es damit erledigt wird, besonders hilfreich Wenn Ladezeiten lang sind und es nur ein paar Vars sind, müssen Sie zwicken, um etwas zu testen. aber dann wieder für etwas wie das sollten Sie wahrscheinlich Datendateien berücksichtigen, die zur Laufzeit neu geladen werden können

Verwandte Themen