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

n0_0ne

1x Contest-Sieger

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

1

15.03.2009, 00:16

Kap. 12 Spiel Konsolenausgabe

Hallo,
Ich hatte heute (nach einigen Monaten) irgendwie Lust, mich mal wieder in C++ einzuarbeiten, und hab dann gleich mal wieder alles installiert und nach einiger Zeit auch das Spiel am Ende des Buchs zum Laufen gebracht (mit neuer SDL version).

Früher habe ich mit Visual Studio gearbeitet, arbeite jetzt aber mit Code::Blocks. Ich habe mir also ein SDL-Projekt erstellt und dort dann alle Include verzeichnisse, libs etc angegeben und die Dateien eingebunden.... soweit läuft auch alles, ich habe jetzt nur das Problem, dass wenn ein Fehler auftritt, ich nur wenige Möglichkeiten habe, diesem auf die Spur zu kommen, weil ich mir Variablen etc nicht einfach in der Konsole (die aber im Hintergrund mitläuft) ausgeben lassen kann. Im Buch habe ich aber an irgendeiner Stelle gelesen, dass es mit cout immer noch ganz normal funktionieren soll, und es wird dort ja auch zur Fehlerausgabe verwendet. Bei mir wird aber nichts ausgegeben... liegt das jetzt am neuen SDL-Paket? an Code::Blocks? an Vista? an mir? oder irgendwas anderem? :?

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

2

15.03.2009, 02:42

Die SDL ist es nicht, bei mir gehts auch..
Vista ist es nicht, bei mir gehts auch...
Code::Blocks kenne ich nicht - vielleicht liegts daran ?:]

Ich arbeite mit Visual Studio und es klappt perfekt... Bist du sicher das alles richtig ist?

n0_0ne

1x Contest-Sieger

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

3

15.03.2009, 07:53

naja, also es läuft ja und was kann man bei einem cout denn falsch machen :P
Mir ist bei CB direkt am anfang schon aufgefallen, dass es bei Konsolenanwendungen irgendwie noch was anderes macht, denn am Ende eines Programms bleibt die Konsole weiterhin offen, es wird der Rückgabewert, die Dauer des Programms angezeigt, und es bleibt weiterhin geöffnet, bis man eine Taste drückt (da steht auch "Press any key to continue").... Bei VS damals musste ich immer selbst das warten auf ne taste einbauen, damit sich die Konsole nicht von selbst geschlossen hat.

Kennt sich jemand mit Code::Blocks aus, und weiß, dass es da vielleicht an irgendwelchen Einstellungen des SDL-Projektes handelt, oder irgendwelche anderen Einstellungen?

EDIT: Ich habe herausgefunden, dass im Ordner der .exe Dateien namens stdout und stderr erzeugt werden, und der Text da reingeschrieben wird, das funktioniert so auch, nur bei mir nicht, anscheinend wird mein code garnicht ausgeführt... aber das Problem kann ich wohl nur selbst am besten lösen :D

n0_0ne

1x Contest-Sieger

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

5

15.03.2009, 09:39

Wie in meinem EDIT bereits geschrieben, hat sich mein Problem gelöst, als ich rausgefunden habe, dass cout nicht mehr in die Console, sondern in Dateien schreibt, welche immer wieder neu erstellt werden. Woher das kommt habe ich allerdings noch nicht herausgefunden, denn KeksX hat ja bereits geschrieben, dass es bei ihm mit der SDL auch noch ganz "normal" funktioniert.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

6

15.03.2009, 12:06

Das liegt daran, dass die Ausgabe und die Fehlerausgabe umgeleitet wurden. Das kann man in der Konsole (cmd) selber machen, indem man hinter die Komandozeile noch ein > dateiname schreibt, um stdout umzuleiten. Unter Linux leitet man stderr mit 2> um. EIngaben kann man auch aus Dateien lesen, dafür gibt es <.

Tritt dein Problem auf, wenn du die exe-Datei aus C::B heraus startest? Wenn ja, probier mal, sie selber per Doppelklickt zu öffnen. Die Ausgabe in der Konsole kommt vermutlich von einem C::B internen Batch-Script (o.ä.) welches auch dafür sorgt, dass die Ausgaben deiner Anwendung in die Dateien umgeleitet werden. Ich benutze kein C::B und kann dir deshalb auch nicht viel helfen, aber probier doch mal, die exe-Datei manuell zu starten.

Socke

n0_0ne

1x Contest-Sieger

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

7

15.03.2009, 12:41

Sowas in der Art habe ich mir schon gedacht. Ich habe jetzt die .exe mal manuell ausgeführt. Als erstes, hat er sich beschwert, dass die dlls fehlen, muss ich die immer im gleichen ordner haben, oder gibts ne möglichkeit, die in die exe mit einzubinden? Wird sicher zum 1000. mal gefragt, aber irgendwie versteh ich das System mit den Libs und DLLs einfach nicht :(
Als es dann aber mal gelaufen ist, hat es im Releasemodus garkeine Konsole mehr gehabt... um Debugmodus schon, aber er hat trotzdem wieder dateien angelegt :evil:

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

8

15.03.2009, 12:48

warum das mit cout nicht funzt wurde ja in etwa gesagt...
man kann bei sdl nichts in der konsole selbst ausgeben.
SDL macht das von alleine und schreibt es in die stdout.txt, nachdem man das programm beendet hat.

und das code::blocks am ende immer die zeit und den return wert anzeigt liegt an dem Debug modus. hatte das schon mal bei wer-weiß-was gefragt.

gruß michi

n0_0ne

1x Contest-Sieger

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

9

15.03.2009, 13:22

achso ok, weil oben jemand geschrieben hat, dass das nicht an SDL liegen kann, weil es bei ihm funktioniert. Das verwirrt dann natürlich etwas :D

Werbeanzeige