QML如何反向播放动画

QML如何反向播放动画,qml,Qml,我想要一个对象,需要它来模拟一个复杂的路径并作为动画移动。 路径包括直线和曲线。就像一列火车 两个解决方案:1路径动画或2状态带有多动画 解决问题1: 列车可能会在随机时间点停止(暂停动画),然后反向返回到起始位置(反向播放动画) 所以我想知道反向播放路径动画的方法吗?我认为QML没有这种功能 您可以在需要新路径时设置新路径。即,当动画结束时 这里有一个例子: import QtQuick 2.3 import QtQuick.Controls 1.1 ApplicationWindow {

我想要一个对象,需要它来模拟一个复杂的路径并作为动画移动。 路径包括直线和曲线。就像一列火车

两个解决方案:1<代码>路径动画或2<代码>状态带有多动画

解决问题1: 列车可能会在随机时间点停止(暂停动画),然后反向返回到起始位置(反向播放动画)


所以我想知道反向播放
路径动画的方法吗?

我认为QML没有这种功能

您可以在需要新路径时设置新路径。即,当动画结束时

这里有一个例子:

import QtQuick 2.3
import QtQuick.Controls 1.1

ApplicationWindow {
    visible: true
    width: 350
    height: 300

    Rectangle {
        id: window
        width: 350
        height: 300

        Canvas {
            id: canvas
            anchors.fill: parent
            antialiasing: true

            onPaint: {
                var context = canvas.getContext("2d")
                context.clearRect(0, 0, width, height)
                context.strokeStyle = "black"
                context.path = pathAnim.path
                context.stroke()
            }
        }

        SequentialAnimation {
            id: mySeqAnim
            running: true

            PauseAnimation { duration: 1000 }

            PathAnimation {
                id: pathAnim

                duration: 2000
                easing.type: Easing.InQuad

                target: box
                orientation: PathAnimation.RightFirst
                anchorPoint: Qt.point(box.width/2, box.height/2)
                path: myPath1
            }

            onStopped: {
                console.log("test")

                pathAnim.path = myPath2;

                mySeqAnim.start();
            }
        }

        Path {
            id: myPath1
            startX: 50; startY: 100

            PathLine { x: 300; y: 100 }

            onChanged: canvas.requestPaint()
        }

        Path {
            id: myPath2
            startX: 300; startY: 100

            PathLine { x: 50; y: 100 }

            onChanged: canvas.requestPaint()
        }

        Rectangle {
            id: box

            x: 25; y: 75
            width: 50; height: 50
            border.width: 1
            antialiasing: true

            Text {
                anchors.centerIn: parent
            }
        }
    }
}

我认为QML没有那个功能

您可以在需要新路径时设置新路径。即,当动画结束时

这里有一个例子:

import QtQuick 2.3
import QtQuick.Controls 1.1

ApplicationWindow {
    visible: true
    width: 350
    height: 300

    Rectangle {
        id: window
        width: 350
        height: 300

        Canvas {
            id: canvas
            anchors.fill: parent
            antialiasing: true

            onPaint: {
                var context = canvas.getContext("2d")
                context.clearRect(0, 0, width, height)
                context.strokeStyle = "black"
                context.path = pathAnim.path
                context.stroke()
            }
        }

        SequentialAnimation {
            id: mySeqAnim
            running: true

            PauseAnimation { duration: 1000 }

            PathAnimation {
                id: pathAnim

                duration: 2000
                easing.type: Easing.InQuad

                target: box
                orientation: PathAnimation.RightFirst
                anchorPoint: Qt.point(box.width/2, box.height/2)
                path: myPath1
            }

            onStopped: {
                console.log("test")

                pathAnim.path = myPath2;

                mySeqAnim.start();
            }
        }

        Path {
            id: myPath1
            startX: 50; startY: 100

            PathLine { x: 300; y: 100 }

            onChanged: canvas.requestPaint()
        }

        Path {
            id: myPath2
            startX: 300; startY: 100

            PathLine { x: 50; y: 100 }

            onChanged: canvas.requestPaint()
        }

        Rectangle {
            id: box

            x: 25; y: 75
            width: 50; height: 50
            border.width: 1
            antialiasing: true

            Text {
                anchors.centerIn: parent
            }
        }
    }
}

谢谢,因为QAbstractAnimation具有方向属性,我认为QML animation应该具有相同的控制动画的能力。我真的想知道为什么Qt不支持这个。好吧,QML不是Qt。QML没有所有的qtapi功能。在任何情况下,您都可以根据您的要求使用C++/Qt来创建QML(可能是插件?)。谢谢,因为QAbstractAnimation具有方向属性,我认为QML animation应该具有相同的控制动画的能力。我真的想知道为什么Qt不支持这个。好吧,QML不是Qt。QML没有所有的qtapi功能。在任何情况下,您都可以根据自己的需求使用C++/Qt实现QML(可能是一个插件?)