Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Lares

1x Contest-Sieger

  • »Lares« ist der Autor dieses Themas
  • Private Nachricht senden

1

30.01.2012, 18:26

Konsolentext und Logfiles

Hallo zusammen,
ich arbeite ja momentan an einer kleinen, eigenen Engine mit DirectX11, und möchte gerne ein paar (allgemeine) Möglichkeiten zum Debuggen implementieren.
Es soll so ablaufen:
Wenn das Spiel mit einen Schlüsselwort gestartet wird, öffnet sich zum normalen Spielfenster die Konsole. In der Konsole werden dann verschiedene Informationen angezeigt (z.B. dass erfolgreich Ressourcen geladen wurden etc.). Über die Konsole soll man dann auch später bestimmte Befehle eingeben können, um zum Beispiel Versionsnummer des Spiels anzuzeigen, oder sich gewisse Variablen ausgeben zu lassen (und zu verändern). Je nach Art des Textes (Benutzereingabe, Fehler,...) erscheint dieser in einer anderen Farbe.

So jetzt zum eigentlichen Problem:
Einer dieser Befehle, soll dafür sorgen, dass der gesamte Textinhalt der Konsole in eine Datei geschrieben wird, sozusagen als Logfile. Als Format hatte ich an html gedacht, damit ich möglichst einfach den Text in unterschiedlichen Farben speichern kann. Blau wäre zum Beispiel Benutzereingabe, dass heißt jeder Text der vom Nutzer in die Konsole eingegeben wird, erscheint sowohl in der Konsole, als auch im Logfile blau.

Muss ich dazu jeden Text, den ich in der Konsole anzeigen lasse, in eine Liste (oder Vektor, je nachdem was in dem Fall besser wäre) speichern, oder gibt es bereits (evt in Kombination mit der Winapi und directx11) eine ähnliche Lösung, die weniger aufwendig oder anderweitig besser wäre? Wie würdet ihr an die Sache rangehen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

30.01.2012, 19:31

Irgendwo musst du es ja schon gespeichert haben wenn du es anzeigst?

Lares

1x Contest-Sieger

  • »Lares« ist der Autor dieses Themas
  • Private Nachricht senden

3

31.01.2012, 09:30

Ne nicht wirklich^^
Momentan ist es so, dass an bestimmten Stellen im Programm ein Befehl steht um einen Text in die Konsole zu schreiben. Beispielsweise folgende Zeile:

C-/C++-Quelltext

1
m_Debug->WriteToConsole("Initializing DirectInput failed!\n");

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

31.01.2012, 12:24

Reden wir hier von einer normalen Windows Konsole oder von einer selbstgebauten Konsole in deinem Spiel?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

31.01.2012, 13:42

offensichtlich von einer eigenen Konsole

du könntest, sofern du sie selbst geschrieben hast und nicht von einer Bibliothek zur Verfügung gestellt wird, die MethodeWriteToConsole umbenennen in WriteMessage oder WriteDebugMessage
diese könnte dann entscheiden, ob die Ausgaben nur auf den Bildschirm oder auch in eine Datei erfolgen soll
(ich empfehle dabei, die Ausgabe immer auch in die Datei vorzunehmen)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

31.01.2012, 13:46

Wenn es sich um eine eigene Konsole handelt, dann muss er aber doch den Text irgendwo gespeichert haben oder zumindest speichern können, denn ansonsten könnte er sie doch niemals anzeigen ;)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

31.01.2012, 13:55

ja, er muss etwas speichern, aber wie viel gespeichert wird kommt ganz auf die Implementierung an
es kann so implementiert sein, dass die gesammten Ausgaben gespeichert werden können
es könnte einen Puffer geben, der nur eine bestimmte Anzahl an Zeichen halten kann
es könnte eine Beschränkung auf die speicherbare Anzahl der Zeilen geben
oder die Ausgaben werden nur so lange gespeichert, wie die Nachricht dargestellt werden soll und dann unabhängig von anderen Ausgaben verworfen

im 1. Fall ließe sich also auch ein Befehl implementieren, mit dem sich die Gesamte Ausgabe in einer Datei speichern lässt
im 2., 3. und 4. Fall ließe sich nur ein Teil abspeichern, wobei es bei 4. am unsinnigsten wäre, zu versuchen, auf das noch gespeicherte zugreifen zu wollen

notfalls kann man auch einen weiteren Speicher einbauen, um einen Befehl realisieren zu können
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

31.01.2012, 14:21

Ja. Die Frage die ich mir vor allem stelle ist: Warum nicht einfach direkt alles in einer Datei mitloggen? Vorteile: Einfach, man hat die Logs auch wenn das Programm abstürzt...

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

31.01.2012, 15:29

deshalb habe ich auch dazu geraten ;)

als Nachtrag zu meinem 1. Beitrag:
sollte die Methode WriteToConsole nicht von dir geschrieben wurden sein, solltest du eine eigene Methode schreiben, die diese Methode aufruft und Ausgaben in eine Datei vornehmen kann
als weiteren Parameter könnte man einen Wert mitgeben, anhand dessen die Art der Nachricht (Benutzereingabe, NPC-Nachricht, Debug-Ausgabe, ...) erkennbar ist

bei einer HTML-Datei und einem Programmabsturz (der nicht abgefangen wurde), dürfte die Datei kein valides HTML liefern, was man nachträglich anpassen muss
du solltest in der HTML- (oder XML-) Datei allerdings keine Formatierung vornehmen, sondern dies in eine andere Datei auslagern (wie einer CSS-Datei für HTML)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

31.01.2012, 15:30

deshalb habe ich auch dazu geraten ;)

Erwischt. Den hätt ich wohl besser lesen sollen ;)

Werbeanzeige