Flackern bei Konsolenanwendung (Spiel:Snake)
-
Hallo erstmal an Alle,
ich programmiere erst seid kurzem in der Schule mit C/C++ und habe jetzt dieses nette Forum hier gefunden. Und ich hätte da mal eine Frage, es wär super wenn mir da jemand behilflich sein könnte.Ich hab in einer Konsolenanwendung Snake programmiert. Über ein 2 dimensionales Array printed er mir mein Spielfeld in die Konsole.
Das Problem ist, daß es nun flackert. Ist nicht sooo schlimm aber wär schon ganz nett wenn man das beheben könnte.Ich hab schon irgendwas von double-buffering gehört und hab auch schon gegoogelt, konnte aber nichts verwertbares finden.
Meine Frage wäre, ist in einer Konsolenanwendung double-buffering überhaupt möglich und wenn nicht, wie/kann man das überhaupt irgendwie weg kriegen?
Schonmal im voraus vielen Dank für eure Zeit/Hilfe
Gruß Manuel
-
hi
klar könnte man mit spatzen auf kanonen schießen, und vorher laden.
jedoch wäre es für dein spiel ev. ausreichend, den augenblick, nachdem gezeichnet wurde, ein wenig stehen zu lassen.
beispiel: Sleep(..) für windows.h oder ähnliches für compiler, die über keine windows.h und/oder über kein 'sleep' verfügen, im notfall eine selbstgeschriebene zeitschleife.
der schnelligkeit tut das keinen abbruch, jedoch wirkt das ganze ruhiger.bedenke, es geht nur um die 'wirkung', konsolenspiele müssen tricksen
while (spielLaeuft) { cls(); //alte schlange löschen nach bs und compiler gotoxy (x,y);// neue positionen cout<<schlange.zeigDich()<<endl; //ausgeben mit flush //steuerung,.... Sleep(50); //feinjustieren }
-
elise schrieb:
while (spielLaeuft) { cls(); //alte schlange löschen nach bs und compiler gotoxy (x,y);// neue positionen cout<<schlange.zeigDich()<<endl; //ausgeben mit flush //steuerung,.... Sleep(50); //feinjustieren }
Vielleicht hilft es, wenn man nicht immer den ganzen Bildschirm löscht (cls();), sondern nur das neu druckt, was sich geändert hat?
-
ja, wäre noch feiner. war mal eben so hingeschrieben.
-
Du könntest aber auch die Windows32 funktionen der Console nutzen. Ein gutes tutorial dazu ist hier zu finden: tutorial
Damit solltest du auch eine doublebuffered Console hinbekommen, kannst zusätzlich auch die farben der einzelnen Zeichen beinflussen
-
Hey, vielen dank für eure raschen antworten, werde mir das am Wochenende mal genauer anschauen
Vielen dank!!!
Gruß Manuel
-
Rash schrieb:
Hey, vielen dank für eure raschen antworten, werde mir das am Wochenende mal genauer anschauen
Vielen dank!!!
Gruß Manuelsag dann mal, ob du das flackern im fenstermodus wegkriegst. ich kriege es nämlich nicht weg und das macht mich sehr traurig. im vollbildmodus ist es weg.
-
volkard schrieb:
sag dann mal, ob du das flackern im fenstermodus wegkriegst. ich kriege es nämlich nicht weg und das macht mich sehr traurig. im vollbildmodus ist es weg.
wieso flackert das bei dir, bzw. wobei? bei einer animation? bei mir flackert nix, wenn ich erst in einen puffer schreibe und diesen dann mit WriteConsoleOutput bzw. WriteConsole ausgebe.
MfG,
a.f.s.