【发布时间】:2019-04-22 13:17:42
【问题描述】:
我有一个 QML Box2D 项目,我正在处理该项目,它有许多不同的多边形,形式为 Box2D 动态实体和多边形夹具,它们都在世界中动态移动。
我的目标是,当两个不同的物体相互碰撞时,它们都会在最初碰撞的任何一侧加入,方法是将两侧面对面匹配并基本上加入一个单一的身体,但保持作为两个独立的身体,以便使用游戏的逻辑来跟踪它们。
这就像两个磁铁漂浮在太空中并相互连接,然后两个磁性侧面相互吸引并在某种意义上融合在一起。
虽然我在创建实体时没有遇到任何问题,并且在确定碰撞何时发生并在它们发生碰撞时执行各种功能方面同样没有问题,但我无法让两个对象简单地组合在最接近碰撞的一侧..
到目前为止,这是我尝试做的事情,但没有成功:
Body {
id: body
world: physicsWorld
property var vertices
bodyType: Body.Dynamic
target: gamePiece
function beginContact(other) {
if (other.getBody() !== wallBody) {
var newObject = Qt.createQmlObject('import QtQuick 2.9; import Box2D 2.0; DistanceJoint { }', body, "dynamicSnippet1");
newObject.bodyA = body;
newObject.bodyB = other.getBody();
newObject.length = 80;
DistanceJoint.collideConnected = true;
body.angularVelocity = 0;
body.fixedRotation = true;
console.log("Created Distance Joint " + newObject);
} else {
console.log("Skipping Body collision with wall");
}
}
fixtures: Polygon {
density: 2
friction: 0.9
restitution: 0.01
vertices: body.vertices
onBeginContact: { body.beginContact(other) }
}
}
每一个像它一样与另一个 Body 碰撞的对象都会被完全拉入碰撞的 Body 中,并且侧面根本不匹配。
我如何确定接触的实体的哪一侧以及如何连接它们的最佳方式?
【问题讨论】: