在我的QML应用程序中,我需要常见的QGraphicsScene和QGraphicsObject可能性,例如检测碰撞,“可移动”和“可选”标志,拖放等。我应该从QQuickItem继承我的类还是使用QML Canvas?当然,我想编写更少的代码并选择“QML方式”。
最佳答案
对于QML中的冲突检测,您可以使用Box 2D QML插件。它具有很多好的功能,可以从here下载。
您也可以自行实现碰撞检测。例如,通过检查:
Math.sqrt((ball1.x-ball2.x)*(ball1.x-ball2.x)+(ball1.y-ball2.y)*(ball1.y-ball2.y))<epsilon
为了使QML项目可移动,您可以执行以下操作:
Image {
id: icon
width: 64
height: 64
source: "liverbird.gif"
MouseArea {
id: liverbirdMouseArea
anchors.fill: parent
property variant iconObj
property int startX
property int startY
onPressed: {
startX = mouseX
startY = mouseY
var iconComp = Qt.createComponent("icon.qml");
iconObj = iconComp.createObject(parent);
iconObj.x = mouseX - iconObj.width/2
iconObj.y = mouseY - iconObj.height/2
}
onPositionChanged: {
iconObj.x += mouseX - startX
iconObj.y += mouseY - startY
startX = mouseX
startY = mouseY
}
onReleased: {
iconObj.destroy()
}
}
}