FrameAnimation QML Type
每次更新动画帧时触发一个处理程序。更多
Import Statement: | import QtQuick |
Since: | Qt 6.4 |
属性
- currentFrame : int
- elapsedTime : real
- frameTime : real
- paused : bool
- running : bool
- smoothFrameTime : real
信号
方法
详细说明
FrameAnimation 可用于在每次动画进行到渲染动画帧时触发一个动作。有关线程和基本渲染循环的详细信息,请参阅场景图文档。
对于一般动画,最好使用NumberAnimation
和其他Animation
元素,因为这些元素提供了描述动画的声明方式。
另一方面,FrameAnimation 应用于自定义的命令式动画和类似的用例:
- 需要在每一帧更新时运行某些代码时。例如,使用渐进式渲染时,每隔一帧运行一次代码。
- 当速度/目标在动画过程中发生变化时,普通的 QML 动画可能限制太多。
- 需要更精确的帧更新时间,例如帧频计数器。
Timer
允许设置interval
时间,而 FrameAnimation 则始终与动画更新同步运行。如果您在使用Timer
时,自定义动画的时间间隔较短,请考虑改用 FrameAnimation,以获得更流畅的动画效果。
// BAD Timer { interval: 16 repeat: true running: true onTriggered: { // Animate something } } // GOOD FrameAnimation { running: true onTriggered: { // Animate something } }
属性文档
currentFrame : int |
该属性用于保存自开始以来的帧更新次数。重新启动帧动画时,currentFrame 将从0
开始。
下面的示例展示了如何对帧更新做出反应。
FrameAnimation { running: true onTriggered: { // Run code on every frame update. } }
该属性也可用于每隔 n 帧才渲染一次。考虑一种高级用法,即用户界面包含两个重型元素,为了达到流畅的 60fps 总帧率,您决定以 30fps 的帧率渲染这些重型元素,第一个元素每隔偶数帧渲染一次,第二个元素每隔奇数帧渲染一次:
FrameAnimation { running: true onTriggered: { if (currentFrame % 2 == 0) updateUIElement1(); else updateUIElement2(); } }
默认情况下,frame
为 0。
elapsedTime : real |
该属性保存自上次启动以来的时间(以秒为单位)。
默认情况下,elapsedTime
为 0。
frameTime : real |
该属性保存自上一帧更新以来的时间(以秒为单位)。
下面的示例展示了如何使用 frameTime 以不同的速度为项目制作动画,并根据屏幕刷新率和可能出现的帧数下降进行调整。
Rectangle { id: rect property real speed: 90 width: 100 height: 100 color: "red" anchors.centerIn: parent } FrameAnimation { id: frameAnimation running: true onTriggered: { // Rotate the item speed-degrees / second. rect.rotation += rect.speed * frameTime } }
默认情况下,frameTime
为 0。
smoothFrameTime : real |
该属性保存自上一帧更新后的平滑时间(以秒为单位)。
下面的示例展示了如何使用 smoothFrameTime 显示平均帧频。
Text { text: "fps: " + frameAnimation.fps.toFixed(0) } FrameAnimation { id: frameAnimation property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0 running: true }
默认情况下,smoothFrameTime
为 0。
信号文档
triggered() |
当FrameAnimation 跳转到新帧时会发出该信号。
注: 相应的处理程序是onTriggered
。
方法文档
pause() |
暂停帧动画
如果帧动画已暂停或未running
,则调用此方法无效。调用pause()
后,paused
属性将为 true。
reset() |
重置帧动画属性
调用此方法可将frame
和elapsedTime
重置为初始值(0)。该方法对running
或paused
属性没有影响,可以在它们为真或为假时调用。
调用reset()
和restart()
的区别在于,reset()
将始终初始化这些属性,而restart()
只在下一帧更新时才初始化这些属性,例如,如果restart()
之后紧接着是pause()
,则不会发生这种情况。
restart() |
重新启动帧动画
如果FrameAnimation 没有运行,则会启动,否则会停止,重置为初始状态后再启动。调用restart()
后,running
属性将为 true。
resume() |
恢复暂停的帧动画
如果帧动画未暂停或未running
,则调用此方法无效。调用resume()
后,paused
属性将变为 false。
start() |
启动帧动画
如果帧动画已在运行,则调用此方法无效。调用start()
后,running
属性将变为 true。
stop() |
停止帧动画
如果帧动画尚未运行,调用此方法不会产生任何效果。调用stop()
后,running
和paused
属性都将为 false。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.