在我的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()
}
}
}