我试图通过向静止物体添加传感器来检测移动物体。 box1
是静止的并且有一个大的圆形传感器,box2
是运动学的,并通过设置其线速度来移动。
import QtQuick 2.6
import QtQuick.Window 2.2
import Box2D 2.0 as Box2D
Window {
id: window
width: 640
height: 480
visible: true
Box2D.World {
id: physicsWorld
gravity: Qt.point(0, 0)
}
Item {
id: box1
x: window.width / 2 - width / 2
y: window.height / 2 - height / 2
width: 32
height: 32
property int sensorRadius: 128
Box2D.Body {
id: boxBody
target: box1
fixtures: [
Box2D.Box {
width: box1.width
height: box1.height
},
Box2D.Circle {
x: box1.width / 2 - box1.sensorRadius
y: box1.height / 2 - box1.sensorRadius
objectName: boxBody.objectName + "CircleSensor"
radius: box1.sensorRadius
sensor: true
onBeginContact: touchIndicator.border.color = "red"
onEndContact: touchIndicator.border.color = "transparent"
}
]
}
Rectangle {
id: touchIndicator
anchors.centerIn: parent
width: box1.sensorRadius * 2
height: box1.sensorRadius * 2
color: "transparent"
border.color: "transparent"
}
}
Item {
id: box2
x: 100
y: 160
width: 32
height: 32
focus: true
Keys.onSpacePressed: box2Body.linearVelocity = Qt.point(3, 0)
Box2D.Body {
id: box2Body
world: physicsWorld
target: box2
bodyType: Box2D.Body.Kinematic
Box2D.Box {
width: box2.width
height: box2.height
}
}
}
Box2D.DebugDraw {
id: debugDraw
world: physicsWorld
anchors.fill: parent
opacity: 0.75
}
}
结果如下:
传感器未检测到移动物体。
如果我使移动物体动态化:
bodyType: Box2D.Body.Dynamic
然后检测到它:
这样做的正确方法是什么?
请记住:
linearVelocity
并且想要使用Kinematic
)。答案 0 :(得分:1)
运动物体具有无限质量,因此不能参与碰撞检测。要检测碰撞,其中一个物体必须为Dynamic
。默认情况下,bodyType
插件中的qml-box2d
为Static
。因此,您的场景包含2个实体 - Kinematic
和Static
,并且传感器未检测到联系人。将boxBody.bodyType
更改为Body.Dynamic
可以解决问题。