WinXP-Konsole langsam?
-
Hi,
ich zimmere gerade ein vollkommen sinnloses Roguelike-Spielchen zusammen, welches auf dem Hardware-25x80 Textmodus laufen soll.
Ich dachte eigentlich im Zeitalter der 3GHz-Maschinen sollte es moeglich sein, jeden Frame komplett neu zu rendern? Da so gut wie jede Zelle ein anderes Farbattribut hat, muss ich jedes Zeichen einzeln mit WriteConsole schreiben, und das max. 25x80 mal. Die dauert schaetzungsweise 100ms (!).
Gibts eine Moeglichkeit, auch in der Konsole Backbuffering (sic) oder Doublebuffering (argh!) zu benutzen? Bzw. den Refresh wie bei ncurses zu verzoegern?
-Gunnar
BTW: In der FAQ gibt es die Frage, wie man in den Fullscreenmodus schaltet. Ab WinXP exestiert die Funktion SetConsoleDisplayMode, die genau dies macht.
-
Verwendest du system("cls")?
Wenn ja kenne ich das Problem bereits. Ansonsten wäre etwas Code ganz hilfreich.
MfG SideWinder
-
So siehts aus:
void putchar(const char ch) { static char buf[2] = {0, 0}; buf[0] = ch; DWORD written; WriteConsole(hOut, (void*)buf, 1, &written, 0); }
Wenn diese Funktion 25x80 mal ausgefuehrt wird dauert es insgesamt ca. 1/10 Sekunden.
System() benutze ich natuerlich nicht..
-
Es wäre wesentlich performanter in ein 25*80-Array zu rendern und dieses am Ende auf einmal rauszuschreiben - am besten dann gleich mit WriteConsoleOutput()
MfG SideWinder
-
Klasse! Die Funktion habe ich wohl in der MSDN-Library uebersehen.
Danke,
Gunnar