AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey Animationen flüssiger ablaufen lassen

Ein Thema von schill · begonnen am 22. Jan 2013 · letzter Beitrag vom 23. Jan 2013
Antwort Antwort
schill

Registriert seit: 17. Dez 2012
3 Beiträge
 
Delphi XE2 Professional
 
#1

Firemonkey Animationen flüssiger ablaufen lassen

  Alt 22. Jan 2013, 20:21
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?!
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Firemonkey Animationen flüssiger ablaufen lassen

  Alt 23. Jan 2013, 12:58
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.
Philip
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Firemonkey Animationen flüssiger ablaufen lassen

  Alt 23. Jan 2013, 13:44
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Firemonkey Animationen flüssiger ablaufen lassen

  Alt 23. Jan 2013, 14:37
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....
Philip
  Mit Zitat antworten Zitat
schill

Registriert seit: 17. Dez 2012
3 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Firemonkey Animationen flüssiger ablaufen lassen

  Alt 23. Jan 2013, 18:39
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.



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!


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.

Geändert von schill (23. Jan 2013 um 18:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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