Я пытался расположить многоугольник, используя Bodies.fromVertices с набором vertexSet, подобным следующему: [{x: 0, y: 800},{x: 0: y: 500}, {x: 1800, y: 300}, {x: 1800, y: 800}, {x: 0, y: 800}]
Проблема, по-видимому, связана с Body.setVertices () в строке 374, где находятся вершины переводятся значениями, возвращаемыми из Vertices.centre (), который находит «центр масс» в противоположность центру объекта. Поэтому, несмотря на определение моего многоугольника на основе внутренней ширины и высоты документа и использования следующего кода для установки положения тела по x, y ... нарисованное тело смещается на несколько пикселей по оси x.
terrain = Bodies.fromVertices(width / 2, height / 2 + (height / 4), vertexSets, { isStatic: true, render: { fillStyle: '#2e2b44', strokeStyle: '#2e2b44', lineWidth: 1 } }, true);
Смещение многоугольника влево
Я попытался создать новую функцию для вычисления центра объекта в отличие от центра масс следующим образом:
Vertices.centreOfObject = function(vertices) {
let xMin = Infinity;
let xMax = -Infinity;
let yMin = Infinity;
let yMax = -Infinity;
for (let i = 0; i < vertices.length; i++) {
xMin = Math.min(xMin, vertices[i].x);
xMax = Math.max(xMax, vertices[i].x);
yMin = Math.min(yMin, vertices[i].y);
yMax = Math.max(yMax, vertices[i].y);
}
return {
x: (xMax - xMin) / 2 + xMin,
y: (yMax - yMin) / 2 + yMin
};
};`
... тогда вместо вызова Vertices.centre () я попытался вызвать Vertices.centreOfObject () в Body.setVertices () в строке 373, что дало следующий результат ...
Результат вызова новой функции Vertices.centreOfObject ()
Это изменение, похоже, решило проблему позиционирования, с которой я столкнулся, но мне интересно, будет ли это изменение иметь отрицательные последствия в других местах.
Я не верю, что какой-либо перевод должен выполняться для объекта на основе его «центра масс», который и рассчитывает метод Vertices.centre ().
выпуск до любых изменений в материи. js доступен для просмотра и проверки здесь: http://procasti.net/dev/atirion.net2/
И изменение, которое я сделал, чтобы изменить "центр масс" на "центр объект "можно найти здесь: http://procasti.net/dev/atirion.net4/
Заранее благодарим за любые идеи, которые вы, ребята, можете иметь.
С уважением Опция