Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Firemonkey Animationen flüssiger ablaufen lassen (https://www.delphipraxis.net/172782-firemonkey-animationen-fluessiger-ablaufen-lassen.html)

schill 22. Jan 2013 19:21

Firemonkey Animationen flüssiger ablaufen lassen
 
Hallo zusammen,

Firemonkey ermöglicht einem das einfache erstellen von Animationen aller Art.

Bei den meisten Animationen ist dies auch schön anzusehen.

Jedoch ist mir aufgefallen, dass es gerade bei Formen (Rectangles, etc) zu Rucklern kommen kann.

Versetzt man sie mit z.B. Position (X oder Y spielt keine Rolle) über AnimateFloat in Bewegung, dann wirkt es teils nicht mehr flüssig.

Nach Recherche bin ich auf den Befehlt AniFrameRate gestoßen.

Leider bringt dieser nicht die gewünschte Abhilfe.



Eventuell hat jemand eine Idee?!

Darlo 23. Jan 2013 11:58

AW: Firemonkey Animationen flüssiger ablaufen lassen
 
Probier mal:
Delphi-Quellcode:
  GlobalUseDirect2D := False; // true by default

  {$IFDEF MacOS}
  GlobalDisableFocusEffect := true;
  {$IFDEF MacOS}
Was mir aufgefallen ist, dass das erstmalige ausführen einer Animation nicht so flüssig ist wie ab dem 2. mal.

stahli 23. Jan 2013 12:44

AW: Firemonkey Animationen flüssiger ablaufen lassen
 
Wenn Ihr in dem Zussamhang eine Idee zu dem ähnlichen Problem
-> http://www.delphipraxis.net/162660-f...lthread-3.html (ab Beitrag #119)
habt, wäre eine Info ganz nett...

Ich verstehe das so, dass FMX den Formularinhalt in einen Puffer schreibt und dann "bei Gelegenheit" das Ganze in das eigentliche Formular kopiert.
Irgendwie ist das Ganze etwas zeitkritisch und läuft u.U. in verschiedenen Threads.
Jedenfalls wird nicht jede Neuzeichnung einer Komponente 100%ig auf dem Formular aktualisiert.

VERMUTUNG: So könnte ggf. auch eine Animation "optisch ruckeln". Im Puffer werden vielleicht alle Änderungen schrittweise vollzogen, aber auf dem sichtbaren Formular werden diese nicht fortlaufend aktualisiert.
Versuche mal, ob ein Timer etwas bringt, in dem Du testweise zyklisch ein Invalidate für Dein Formular durchführst.
Wäre mal interessant, ob das hilft.

In dem Fall müsste man mal abklären, ob das "Refreshproblem" konzeptionell bedingt oder ein Bug ist. Eine eindeutige Problembeschreibung ist in meinem Fall jedoch schwierig, da hier Controls aus einem Framework heraus aktualisiert werden.

Darlo 23. Jan 2013 13:37

AW: Firemonkey Animationen flüssiger ablaufen lassen
 
Ich arbeite hier noch mit XE2. Habe Probleme nach XE3, also FM2 zu migrieren. Bestes Beispiel ist das FireFlow-Sample, das unter XE3 nicht sauber läuft.
Wüsste ich was da falsch läuft würde ich schon längst XE3 benutzen....

schill 23. Jan 2013 17:39

AW: Firemonkey Animationen flüssiger ablaufen lassen
 
Zitat:

Zitat von Darlo (Beitrag 1200222)
Was mir aufgefallen ist, dass das erstmalige ausführen einer Animation nicht so flüssig ist wie ab dem 2. mal.

Das kann ich bestätigen. Eventuell müsste man also die Animationen, bei denen es zu Rucklern kommt, einmal im Hintergrund ausführen.

Eine wirklich saubere Lösung ist dies allerdings auch nicht.



Zitat:

Zitat von stahli (Beitrag 1200229)
VERMUTUNG: So könnte ggf. auch eine Animation "optisch ruckeln". Im Puffer werden vielleicht alle Änderungen schrittweise vollzogen, aber auf dem sichtbaren Formular werden diese nicht fortlaufend aktualisiert.
Versuche mal, ob ein Timer etwas bringt, in dem Du testweise zyklisch ein Invalidate für Dein Formular durchführst.
Wäre mal interessant, ob das hilft.


Ich habe folgendes getestet:
Code:
  while (rectangle.Position.X > -410) do
  begin
    rectangle.Position.X := rectangle.Position.X - 3;
    sleep(5);
    Application.ProcessMessages;
  end;
Die Animation ist flüssig! Die optischen Ruckler sind verschwunden. Danke für die Idee!


Zitat:

Zitat von Darlo (Beitrag 1200243)
Ich arbeite hier noch mit XE2. Habe Probleme nach XE3, also FM2 zu migrieren. Bestes Beispiel ist das FireFlow-Sample, das unter XE3 nicht sauber läuft.
Wüsste ich was da falsch läuft würde ich schon längst XE3 benutzen....

Zum testen könntest du es auch einmal mit einem Timer oder der Konstruktion von oben versuchen. AnimateFloat scheint noch nicht ganz ausgereift zu sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz