У меня есть проект 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) }
}
}
Каждый объект, который сталкивается с другим Телом, как будто он просто полностью втягивается в сталкивающееся Тело, и стороны не совпадают вообще.
Как бы я определил, какие стороны Тела соприкасаются и как лучше всего их соединить?