Wie kann ich mit Delphi ruckel- und flimmerfreie Animationen
erzeugen? Ich möchte ein Linienmuster animieren. Falls ich
dieses mit lineto zeichne, danach mit refresh lösche und
anschließend wieder neu zeichne, flimmert es zu sehr. Muß ich
direkt auf die windows GDI - funktionen zugreifen, wenn ja wie
geht das? Was für Möglichkeiten gibt es noch??
Also, um zu verstehen, wie man das verhindern kann, sollte man die Ursachen kennen: Wenn du der zeichnest, schreibst du in den Speicher. Das geht bei heutigen Rechnern recht schnell. Die Frequenz des Monitors kommt dabei aber nicht mit - das Resultat: Bevor der Bildschirm auch nur ein einziges mal den Speicher auf den Schirm gebracht hat, hast du schon vielleicht 3mal wieder an der gleichen Stelle in den Speicher geschrieben. Du mußt daher den Zeichenvorgang mit der Bildwiederholfrequenz synchronisieren.
Dazu gibt es eine Technik, die sich Backbuffering nennt: Schreibe in einen Speicherbereich, der nicht direkt zum Bildschirm geschickt wird, und zwar während der Bildschirm das aktuelle Bild zeichnet. Warte dann auf den sog. vertikalen Strahlrücklauf des Monitors und vertausche dann den Speicherbereich, in den du geschrieben hast mit dem Speicherbereich, der zum Bildschirm geschickt wird. Dieser Vorgang kann daher maximal so oft in der Sekunde durchgeführt werden, wie der Bildschirm neu zeichnet. Also ist deine resultierende Framerate im Idealfall gleich der Bildwiederholfrequenz.
Das setzt du programmiertechnisch am besten mit DirectX um.
Das bei kleineren Grafiken weniger Flackereffekte auftreten liegt schlicht und einfach daran, daß weniger Speicher betroffen ist. Den Flimmereffekt kann es aber nicht beheben.
Falls du weitere Informationen dazu suchst, schau am besten unter dem Begriff „Tearing“ nach.