我正在尝试组合一个动画,我可以在其中指定速度(而不是持续时间)以及永久循环。我提出了两个不起作用的例子:
FirstTry.qml
import Qt 4.7
Rectangle {
width: 100; height: 100
Text {
text: "hello"
NumberAnimation on x {
to: 50;
loops: Animation.Infinite;
duration: 50 * Math.abs(to - from)
}
}
}
当hello
在屏幕上疯狂时,我得到以下运行时警告(足够公平)。
QDeclarativeExpression: Expression "(function() { return 50 * Math.abs(to - from) })" depends on non-NOTIFYable properties:
QDeclarativeNumberAnimation::to
QDeclarativeNumberAnimation::from
SecondTry.qml
import Qt 4.7
Rectangle {
width: 100; height: 100
Text {
text: "hello"
SmoothedAnimation on x {
to: 50;
loops: Animation.Infinite;
velocity: 50
}
}
}
这更像是一种谜 - SmoothedAnimation
只是拒绝循环!动画运行一次然后就是它。
所以我有以下问题:
在第一个例子中是否有合法的方法来指定速度?我理解SmoothedAnimation
派生自NumberAnimation
,所以也许它可能在QML中,而不仅仅是在C ++中。
有没有办法让SmoothedAnimation
循环?第二个例子是不是在处理bug还是我遗漏了什么?
还有其他方法可以同时实现这两种行为吗?
答案 0 :(得分:3)
只需明确添加“from”参数:
import Qt 4.7
Rectangle {
width: 100; height: 100
Text {
text: "hello"
NumberAnimation on x {
from: 0;
to: 50;
loops: Animation.Infinite;
duration: 50 * Math.abs(to - from)
}
}
}
答案 1 :(得分:1)
这就是我作为临时解决方案所做的,我不确定它是否足够,但它似乎正在做我需要的。
SmoothedAnimation on x {
to: 50;
//loops: Animation.Infinite;
velocity: 50
onComplete: { restart (); }
}
但我仍然对这些问题的答案感兴趣。
答案 2 :(得分:0)
即使 SmoothedAnimation 不接受循环参数,您也可以将其放在 SequentialAnimation 中并应用循环到这个外部封面。作为一种效果,您的平滑动画将连续播放。