【问题标题】:Dynamically change from/to values used in animations从/到动画中使用的值动态更改
【发布时间】:2016-11-07 14:42:30
【问题描述】:

假设我有以下代码:

Rectangle {
  id: rect

  property int minVal : 0
  property int maxVal : 10
  property int duration: 1000

  SequentialAnimation {
    loops: Animation.infinite
    NumberAnimation {
       target: rect; property: "x"
       from: minVal;  to: maxVal
       duration: duration
    }
    NumberAnimation {
       target: rect; property: "x"
       from: maxVal;  to: minVal
       duration: duration
    }
  }
}

然后,我将这个对象的minValmaxValduration 属性连接到滑块,这样我就可以玩这个效果了。

有没有办法强制动画使用新的 min/maxVal 值?

目前,动画初始化时出现的minVal/maxVal 值似乎被“烘焙”到动画中,无法强制这些值稍后重新计算/重新烘焙

以前,每次需要其中一项更改时,我都能够摆脱整个 QML 画布。但是在这种情况下,它并不是很实用,所以我想知道是否有其他替代方案?

【问题讨论】:

    标签: qt animation qml qtquick2


    【解决方案1】:

    我找不到在这些值中“烘焙”的方法。至少对我来说,这符合我的预期:

    Button {
        id: but
        property int count: 0
        property int minX: 0
        property int maxX:  1000
    
        text: 'start' + x
    
        onCountChanged: {
            minX += 10
            maxX -= 10
        }
    
        onClicked: ani.start()
    }
    
    SequentialAnimation {
        id: ani
        NumberAnimation {
            target: but
            property: 'x'
            from: but.minX
            to: but.maxX
        }
        ScriptAction {
            script: { but.count += 1 }
        }
    }
    

    我尽可能避免可能会以某种方式嵌入的绑定。
    我错过了你的问题吗?

    【讨论】:

    • @BaCaRoZzo:谢谢!
    • 不客气。 :) 通常人们会因为被编辑而生气,我很高兴事实并非如此。
    • 事实证明,在我之前遇到的问题系统中发生了几件事:1)受这个答案的启发,我在每个属性中添加了“on[Var]Changed”处理程序动画取决于,它会做 anim.restart(); 2)有一些错别字在找不到相关对象时默默地出错; 3)我不得不按照设置刷新的顺序来玩(例如,持续时间属性必须排在最后!)
    • 哦,出于某种奇怪的原因,“maxVal”刷新必须在“minVal”之前发生,否则不会应用“maxVal” - 因为 maxVal 是唯一真正改变/重要的事情,让它发挥作用很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2012-08-28
    • 2013-10-31
    相关资源
    最近更新 更多