使用QML中的计时器安排动画

使用QML中的计时器安排动画,qml,qtquick2,Qml,Qtquick2,我想创建一个从列表开始动画的组件。下面我提供了一个我想做的例子。我不知道这在性能和计时器准确性方面是否正确。为每个动画使用专用计时器是否更好 import QtQuick 2.0 Item { id: root function startOne() { animOne.start() } function startTwo() { animTwo.start() } property var listEve

我想创建一个从列表开始动画的组件。下面我提供了一个我想做的例子。我不知道这在性能和计时器准确性方面是否正确。为每个动画使用专用计时器是否更好

import QtQuick 2.0

Item {
    id: root

    function startOne() {
        animOne.start()
    }

    function startTwo() {
        animTwo.start()
    }

    property var listEvent: {
        1000: root.startOne,
        2000: root.startTwo
    }

    property int elapsed: 0
    property int last_elapsed: 0

    Rectangle {
        id: one
        x: 0
        y: 0
        width: 200
        height: 200
        color: "black"
    }

    Rectangle {
        id: two
        x: 600
        y: 600
        width: 200
        height: 200
        color: "black"
    }

    PropertyAnimation {
        id: animOne
        target: one
        properties: "x"
        to: 600
        running: false
    }

    PropertyAnimation {
        id: animTwo
        target: two
        properties: "x"
        to: 0
        running: false
    }

    function pop(last_elapsed, elapsed) {
        for (var i = last_elapsed; i <= elapsed; i++) {
            if (i in root.listEvent) {
                listEvent[i]()
            }
        }
    }

    function scheduleEvent(delta) {
        root.last_elapsed = root.elapsed
        root.elapsed += delta
        root.pop(root.last_elapsed, root.elapsed)
    }

    Timer {
        id: scheduler
        interval: 16
        running: true
        repeat: true
        onTriggered: {
            root.scheduleEvent(scheduler.interval)
            console.log("timer: " + root.elapsed)
        }
    }
}
导入QtQuick 2.0
项目{
id:根
函数startOne(){
animOne.start()
}
函数startTwo(){
第二,开始
}
属性变量listEvent:{
1000:root.startOne,
2000:root.startTwo
}
属性:0
上次运行的属性int:0
长方形{
身份证号码:1
x:0
y:0
宽度:200
身高:200
颜色:“黑色”
}
长方形{
身份证号码:两张
x:600
y:600
宽度:200
身高:200
颜色:“黑色”
}
物业估价{
id:animOne
目标:1
属性:“x”
至:600
跑步:错
}
物业估价{
身份证号码:2
目标:两个
属性:“x”
致:0
跑步:错
}
函数pop(上次运行,已运行){

对于(var i=LastTyelEsPy;i Time< /Cord>)实际上并不准确(参见),但它仍然可以用于示例中使用的分辨率。C++解决方案(例如)可以大大提高精度。关于性能……,它嗅到我们在这里陷入了过早的优化。