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

31

21.06.2015, 22:10

Hallo,


also, das Flackern kommt nicht von mangelnder Rechenkraft.

Wir müssen erst mal an der Stelle unterscheiden, wann du in dein Fenster zeichnest und wann Windows das Fenster auf den Bildschirm zeichnet.

Wenn du mit System("cls") den Inhalt von deinem Fenster löscht, dann zeichnet Windows ein schwarzes Fenster auf den Bildschirm. Anschließend malst du deine Straße, Spieler und Hindernisse (hoffentlich ;). Dieses kurze Darstellen der gelöscheten Bildschirms ist dein Flackern und das gilt es zu verhindern.


Normalerweise löst man es so, dass auf einen nicht sichtbaren Bildschirm gezeichnet wird (der ist nur im Ram vorhanden). Erst nach Abschluss des Zeichnens wird der gesamte Bereich umgeschaltet und das Endbild ist zu sehen. Such mal nach Double Buffering. (habs nur vereinfacht dargestellt).

In deinem Fall arbeitest du mit der Konsole. Die ist ein wenig ein Sonderfall wenn du die normale Ausgabe mit std::cout odfer printf machst. In diesem Fall must du verhindern, dass Windows deine gelöschte Konsole auch wirklich zeichnet und so das Flackern kommt. Das macht LockWindowUpdate()

Also, ich weiß ja nicht, wann du zeichnest. Üblicherweise macht man das an einer einzigen Stelle im Programm und nicht verteilt. Dann kommt die schon genannte Reihenfolge zum Tragen.

Also

Quellcode

1
2
3
4
5
6
  LockWindowUpdate(GetConsoleWindow());
  System("cls");
  
  // Code für Straße, Spieler, Hindernisse und sonstiges zeichnen

  LockWindowUpdate(NULL);


Das verhindert, dass Windows die Konsole auf dem Bildschirm neu zeichnet, wärend du dein Bild "malst".

PS: Wenn ihr euer Spiel verbessern wollt und nebenbei noch ein wenig eure Fertigkeiten ausbauen wollt, dann schau doch dir doch mal das hier an: https://www.c-plusplus.net/code/ic/ Die Doku dazu sollte komplett in deutsch sein.

PPS: Wenn du magst, dann gebt doch den Source Code auf deiner Webseite frei. Dann können auch andere mal drüber schauen.


Grüße.

EDIT: mann, einmal den Beitrag fertig schreiben... Braucht natürlich windows.h

32

21.06.2015, 22:21

Danke. das werde ich dann morgen mal testen :sleeping: Vielen Dank für die netten Tipps.
SCHWEIGEN IST SILBER, REDEN IST GOLD :D

33

10.07.2015, 10:21

saugt leider ziemlich leistung aber wir bemühen uns um ein update.
SCHWEIGEN IST SILBER, REDEN IST GOLD :D

34

10.07.2015, 17:09

mit LockWindowUpdate?
Alternativ mit meiner Methode, den ganzen Bildschirm mit den neuen Zeichen überschreiben.

Werbeanzeige