使用QML绘制图形项目的最佳方法是哪种?

时间:2014-03-29 20:01:50

标签: c++ qt qml collision-detection qt-quick

在我的QML应用程序中,我需要常见的QGraphicsScene和QGraphicsObject可能,例如检测碰撞,"可移动"和"可选"标志,拖放等我应该从QQuickItem继承我的类还是使用QML Canvas?当然,我想写更少的代码并选择一个" QML-way"。

1 个答案:

答案 0 :(得分:2)

对于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()
        }
    }
}