Hello, I am also wondering, when I do have animations playing in the scene, but I do not want to constantly redisplay the contents of the world, so I turned off AutoRedisplay, when AnimationSkipTicks is 0, it is correctly updating running animation, but when it is set to value like 1 or 2 (to improve CPU performance), then it does update only when something in the scenes does change, mostly Transform attributes I guss (e.g. from Idle it goes to move and Translation of character is changing, etc.). Is there a way to have animations automatically updated not every single frame, without having AutoRedisplay on, or is there a need to do some custom update override to keep track of active animations and frames since last updated and do it like that? Thanks for suggestions.
What you describe should work OK.
That is, if you set
false, and set
Scene.AnimateSkipTicks to e.g. 1 (or any other valid value), then the window should be automatically redrawn on the frames where animation “tick” actually happens (the window will be also redrawn if anything else send “invalidate” naturally, so it may update more often, but not less).
I made a test, it seems to work OK. In this example, I
Window.AutoRedisplay := false
- set scene
AnimateSkipTicks(using editor) to 2
- deliberately disabled
LabelFpsupdating each frame, to not affect the test
And the window seems still updated, i.e. animation is shown playing.
Can you test the attached example on your end? Does it work (animation is visibly playing) for you?
- If the attached example doesn’t work for you, let me know your OS, CPU, compiler. Maybe we have some platform-specific bug.
- If the attached example works for you, then I need more details to reproduce the bug you describe. Can you send me a testcase that shows the problem? Either by minimizing your program, or you can take the attached testcase and tweak it to resemble what you’re doing?
animation-ticks-0.1-src.zip (418.1 KB)