【发布时间】:2017-12-10 07:51:49
【问题描述】:
我在 QML 项目中的 Rectangle 内有一个球动画,如下所示,我希望当它碰到 Rectangle 的边界时,它会返回内部,直到碰到另一个边界,然后再返回,依此类推。
我为此编写了这段代码,但不知道使用什么代码让球在击中边界时返回!
你能帮帮我吗?
main.qml:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 800
height: 600
title: qsTr("Ball_in_Room")
Rectangle {
id: root
width: 700; height: 500
border.width: 10
border.color: "gray"
color: "moccasin"
property real xPos: root.width
property real yPos: Math.random() * root.height
Ball { id: ball }
ParallelAnimation {
id: anim
NumberAnimation {
target: ball
properties: "x"
to: root.xPos
duration: 1000
easing.type: Easing.Linear
}
NumberAnimation {
target: ball
properties: "y"
to: root.yPos
duration: 1000
easing.type: Easing.Linear
}
}
MouseArea {
anchors.fill: ball
onClicked: anim.start()
}
}
}
Ball.qml:
import QtQuick 2.8
Rectangle {
width: 20; height: 20
x: 250; y: 250
color: "blue"
radius: width/2
}
【问题讨论】:
-
“返回”是什么意思?你想在这里实现反射效果吗?我认为这个问题与 QML 无关。我不只是计算,你只需要实现一些已知的算法来获得正确的方向和碰撞检测。顺便说一句,您为什么不直接获得一些 2D 引擎而不是自己实现呢?看看qml-box2d Box2D QML 插件。
-
谢谢。 (+1)。是的,我的意思是反思。考虑一下你在一个房间里,用你的脚射球。它朝房间的墙壁移动,然后反射回来并撞到房间的另一面墙壁,然后再次发生,直到球停止。我的意思是如何让球触到人墙并反弹等等。我想解决这个练习。
标签: animation qml qtquick2 qtquickcontrols2