Код QML и анимация не работают должным образом

В моей программе QML мне нужно использовать Animations для проверки наличия проблемы. Пожалуйста, запустите приведенный ниже код в вашей системе. Я не знаю, почему, когда я использую этот ParallelAnimation, мяч не отражается при ударе о стену!

Вот main.qml:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 720
    height: 620

    Rectangle {
        id: table
        anchors.fill: parent
        color: "gray"

        Rectangle {
            id: ball
            property double xincrement: Math.random() + 0.5 
            property double yincrement: Math.random() + 0.5
            width: 15
            height: width
            radius: width / 2
            color: "white"
            x: 300; y: 300
        }

        Racket {
            id: myRacket
            x: table.width - 50
            y: table.height/3
            color: "blue"
        }

        ParallelAnimation {
            id: anim
            NumberAnimation {
                target: ball
                properties: "x"
                to: timer.xMove
            }
            NumberAnimation {
                target: ball
                properties: "y"
                to: timer.yMove
            }
        }

        Timer {
            id: timer
            interval: 20; repeat: true; running: true
            property double xMove: ball.x + ball.xincrement
            property double yMove: ball.y + ball.yincrement

            onTriggered: {
                if(ball.x + ball.width >= table.width || ball.x <= 0)
                    ball.xincrement *= -1

                xMove += ball.xincrement
                yMove += ball.yincrement
                anim.restart()

                if(ball.y <= 0 || ball.y + ball.height >= table.height)
                    ball.yincrement *= -1
            }
        }
    }
}

А вот и Racket.qml:

import QtQuick 2.9

Rectangle {
    id: root
    width: 15; height: 65

    MouseArea {
        anchors.fill: root
        anchors.margins: -root.height
        drag.target: root
        drag.axis: Drag.YAxis
        drag.minimumY: 0
        drag.maximumY: 600
    }
}

EDIT1:

Я использовал этот код без Animations, и он работает хорошо! (Отброшенные части одинаковы)

...
Rectangle {
            id: ball
            property double xincrement: Math.random() + 0.5
            property double yincrement: Math.random() + 0.5
            width: 15
            height: width
            radius: width / 2
            color: "white"
            x: 300; y: 300
        }
...

Timer {
            id: timer
            interval: 20; repeat: true; running: true

            onTriggered: {
                if(ball.x + ball.width >= table.width || ball.x <= 0)
                    ball.xincrement *= -1

                ball.x += ball.xincrement * 2.0
                ball.y += ball.yincrement * 2.0

                if(ball.y <= 0 || ball.y + ball.height >= table.height)
                    ball.yincrement *= -1
            }
        }
    }
}

person opty    schedule 07.01.2018    source источник
comment
Ваш вопрос примерно такой: У меня проблема с Анимацией, ваше решение по устранению Анимации, то есть решение любой проблемы, я понимаю, что решение, которое вы искали, это решить вашу проблему даже с Анимацией, но кажется, что нет, это не так.   -  person eyllanesc    schedule 07.01.2018
comment
Почему вы проголосовали за вопрос, а также удалили свой ответ !? Я новичок, и у меня может быть много вопросов, чтобы научиться правильно.   -  person opty    schedule 07.01.2018
comment
Я не говорил об упомянутом вами отрицательном голосовании, я исключил свой вопрос, так как думал, что у вас уже есть собственное решение.   -  person eyllanesc    schedule 07.01.2018
comment
Извините, но у меня нет решения, и, как я указал в своем вопросе, мне нужно использовать Animations для проверки проблемы. Поэтому при использовании Animations требуется новое решение. А так же у меня могут быть вопросы и вопрос который я задал был про разное поведение программы с Animations и без.   -  person opty    schedule 07.01.2018
comment
Вы пробовали мое решение?   -  person eyllanesc    schedule 07.01.2018
comment
Ваш вопрос должен быть конкретным, если у вас есть другие вопросы, создайте другие сообщения, ТАК работает.   -  person eyllanesc    schedule 07.01.2018
comment
Да, спасибо. Это работает, но почему эти многие else-if не нужны в версии без анимации (разделы EDIT1), потому что попадание в стены не зависит от того, как движется мяч.   -  person opty    schedule 07.01.2018
comment
проблема с использованием таймера, который у вас будет в будущем, заключается в том, что вы перегрузите свое приложение, если у вас нет адекватной обработки, если вы используете анимацию, это будет обновлять позицию соответствующим образом, принимая время обновления от окно.   -  person eyllanesc    schedule 07.01.2018
comment
Код должен быть четким, если у вас не могло быть проблем, подобных той, что у вас была, ошибка у меня была в том, чтобы иметь компактный код, я только разделил его, не добавляя больше расчета, то есть на уровне компьютера он имел ту же стоимость , предпочтительно использовать сложение или вычитание, или перестановку знаков, что умножение на -1   -  person eyllanesc    schedule 07.01.2018


Ответы (1)