4
在我的QML應用程序中,我需要常見的QGraphicsScene和QGraphicsObject可能性,如檢測碰撞,「移動」和「可選」標誌,拖放等。我應該從QQuickItem繼承我的類還是使用QML Canvas?當然,我想寫更少的代碼並選擇「QML方式」。哪個是使用QML繪製圖形項目的最佳方式?
在我的QML應用程序中,我需要常見的QGraphicsScene和QGraphicsObject可能性,如檢測碰撞,「移動」和「可選」標誌,拖放等。我應該從QQuickItem繼承我的類還是使用QML Canvas?當然,我想寫更少的代碼並選擇「QML方式」。哪個是使用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()
}
}
}