Flackern in meinem Programm
Flackern in meinem Programm
Hallo,
bin neu hier und bastel seit einiger zeit an einem kleinen spiel rum. Ein 2D towerdefense.
Bin eher unerfahren was das prorammieren betrifft von daher kenn ich nicht so die fachsprache.
Ich hatte vor ein element umzuschreiben, da mir das nicht mehr so gefallen hat wie es war.
Als ich dann nach ein paar tagen fertig damit war und auch alles so war wie ich es wollte, ohne zwischendurch überhaupt nur irgendetwas während der laufzeit zu testen oder die builds zwischenzuspeichern,
bemerkte ich im GUI flackern. Dieses flackern entstand aber nur wenn "gegner" aktiviert/im spielfeld waren und dann auch nur wenn mal wieder "viel" gerechnet werden musste.
Ich schließe es auf überlastungen im code zurück, wie ein flaschenhals, da ich aber auf etwas anderes hoffe wollte ich hier mal fragen ob es auch andere gründe dafür geben könnte ?
Nochmal zusammengefasst:
Kein flackern wenn "viel" gerechnet wird.
Ich habe etwas umgeschrieben
Flackern wenn "viel" gerechnet wird.
Die farbe des flackerns entspricht der farbe von meiner Form1.
Ich habe natürlich schon so weit wie ich es konnte, versucht die neuen stellen auszukommentieren und den alten code wiederherzustellen.
Das hat aber auch nichts am flackern geändert, da ich wahrscheinlich nicht genau das wiederherstelle was davor da war.
Dinge die ihr vielleicht für eine antwort bräuchtet:
Habe die letzte änderung mit der IDE Lazarus version 1.2.6 durchgeführt und vor der änderung hatte ich dieselbe version.
Betriebssystem: Windows 7
Ich hänge sehr an diesem kleinen spiel. Seitdem ich bisschen programmieren kann, schreibe es immer wieder erneut mit immer besseren methoden.
Da der wichtige code, der meiner vermutung nach den "lag" verursacht, über 1000 zeilen ist hab ich da mal nichts eingefügt. (dieser code steckt in einem timer, der quasi das herzstück des programms ist) ^^
bin neu hier und bastel seit einiger zeit an einem kleinen spiel rum. Ein 2D towerdefense.
Bin eher unerfahren was das prorammieren betrifft von daher kenn ich nicht so die fachsprache.
Ich hatte vor ein element umzuschreiben, da mir das nicht mehr so gefallen hat wie es war.
Als ich dann nach ein paar tagen fertig damit war und auch alles so war wie ich es wollte, ohne zwischendurch überhaupt nur irgendetwas während der laufzeit zu testen oder die builds zwischenzuspeichern,
bemerkte ich im GUI flackern. Dieses flackern entstand aber nur wenn "gegner" aktiviert/im spielfeld waren und dann auch nur wenn mal wieder "viel" gerechnet werden musste.
Ich schließe es auf überlastungen im code zurück, wie ein flaschenhals, da ich aber auf etwas anderes hoffe wollte ich hier mal fragen ob es auch andere gründe dafür geben könnte ?
Nochmal zusammengefasst:
Kein flackern wenn "viel" gerechnet wird.
Ich habe etwas umgeschrieben
Flackern wenn "viel" gerechnet wird.
Die farbe des flackerns entspricht der farbe von meiner Form1.
Ich habe natürlich schon so weit wie ich es konnte, versucht die neuen stellen auszukommentieren und den alten code wiederherzustellen.
Das hat aber auch nichts am flackern geändert, da ich wahrscheinlich nicht genau das wiederherstelle was davor da war.
Dinge die ihr vielleicht für eine antwort bräuchtet:
Habe die letzte änderung mit der IDE Lazarus version 1.2.6 durchgeführt und vor der änderung hatte ich dieselbe version.
Betriebssystem: Windows 7
Ich hänge sehr an diesem kleinen spiel. Seitdem ich bisschen programmieren kann, schreibe es immer wieder erneut mit immer besseren methoden.
Da der wichtige code, der meiner vermutung nach den "lag" verursacht, über 1000 zeilen ist hab ich da mal nichts eingefügt. (dieser code steckt in einem timer, der quasi das herzstück des programms ist) ^^
Win7 64-Bit | Lazarus IDE v.1.4.4 | Wünderschönen Tag!
Re: Flackern in meinem Programm
Probier doch mal als erstes z.b. im OnCreate von deinem Hauptformular
Code: Alles auswählen
Doublebuffered:=True;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Flackern in meinem Programm
Also das funktioniert... unglaublich.Michl hat geschrieben:Probier doch mal als erstes z.b. im OnCreate von deinem HauptformularCode: Alles auswählen
Doublebuffered:=True;
Vielen dank dachte schon ich kann die vielen tage arbeit wegwerfen.
Mein retter.

Was genau macht jetzt dieses DoubleBuffered ?
Habe gelesen das nutzen schluckt dafür perfomance. Ist das bei einem so kleinem programm schon möglicherweise spürbar ?
Win7 64-Bit | Lazarus IDE v.1.4.4 | Wünderschönen Tag!
Re: Flackern in meinem Programm
Siehe http://lazarus-ccr.sourceforge.net/docs ... fered.html
Zwei Bemerkungen noch am Rande:
- generell sollten eigene Zeichenoperationen immer nur im OnPaint ausgeführt werden (auch wenn es unter Windows vordergründig erstmal egal scheint)
- für größere grafische Aufgaben wäre eine Verwendung von OpenGL sinnvoll (bedeutet aber etwas Einarbeitung)
Zwei Bemerkungen noch am Rande:
- generell sollten eigene Zeichenoperationen immer nur im OnPaint ausgeführt werden (auch wenn es unter Windows vordergründig erstmal egal scheint)
- für größere grafische Aufgaben wäre eine Verwendung von OpenGL sinnvoll (bedeutet aber etwas Einarbeitung)
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Flackern in meinem Programm
zum Thema OpenGL:
http://wiki.delphigl.com/index.php/Tutorial_Quickstart
(ich vermute mal, dass dein Spiel 2D ist)
http://wiki.delphigl.com/index.php/Tutorial_2D
OpenGL ist wesentlich schneller als die integrierte Zeichenbibliothek der LCL. Außerdem gibts die Tiefensortierung "Gratis".
Es kostet erstmal natürlich Zeit sich da einzuarbeiten, aber es lohnt sich auf jeden Fall.
Die Zeit, die man ins lernen steckt hat man bei optimierungen wieder raus, die man benötigen würde um einigermaßen erträgliche Framerates hinzubekommen mit der LCL.
MFG
Komoluna
http://wiki.delphigl.com/index.php/Tutorial_Quickstart
(ich vermute mal, dass dein Spiel 2D ist)
http://wiki.delphigl.com/index.php/Tutorial_2D
OpenGL ist wesentlich schneller als die integrierte Zeichenbibliothek der LCL. Außerdem gibts die Tiefensortierung "Gratis".
Es kostet erstmal natürlich Zeit sich da einzuarbeiten, aber es lohnt sich auf jeden Fall.
Die Zeit, die man ins lernen steckt hat man bei optimierungen wieder raus, die man benötigen würde um einigermaßen erträgliche Framerates hinzubekommen mit der LCL.
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: Flackern in meinem Programm
Vielen dank für den Tipp mit OpenGL.
Wenn ich mal wieder genug Freizeit hab schau ich da mal rein.
Wenn ich mal wieder genug Freizeit hab schau ich da mal rein.
Win7 64-Bit | Lazarus IDE v.1.4.4 | Wünderschönen Tag!
-
- Beiträge: 7026
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Flackern in meinem Programm
Wen ich mit OpenGL anfangen würde, dann würde ich mindestens OpenGL 3.3 empfehlen.
Die Einarbeitung ist zwar ein bisschen grösser, dafür aber effizienter.
Die Einarbeitung ist zwar ein bisschen grösser, dafür aber effizienter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot