Flackern in meinem Programm

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Horatius
Beiträge: 5
Registriert: So 12. Apr 2015, 20:52

Flackern in meinem Programm

Beitrag von Horatius »

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) ^^
Win7 64-Bit | Lazarus IDE v.1.4.4 | Wünderschönen Tag!

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: Flackern in meinem Programm

Beitrag von Michl »

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;  

Horatius
Beiträge: 5
Registriert: So 12. Apr 2015, 20:52

Re: Flackern in meinem Programm

Beitrag von Horatius »

Michl hat geschrieben:Probier doch mal als erstes z.b. im OnCreate von deinem Hauptformular

Code: Alles auswählen

Doublebuffered:=True;
Also das funktioniert... unglaublich.
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!

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: Flackern in meinem Programm

Beitrag von Michl »

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)

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Komoluna
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

Beitrag von Komoluna »

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
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Horatius
Beiträge: 5
Registriert: So 12. Apr 2015, 20:52

Re: Flackern in meinem Programm

Beitrag von Horatius »

Vielen dank für den Tipp mit OpenGL.

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!

Mathias
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

Beitrag von Mathias »

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.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten