Нерегулярное расположение полигонов с веществом. js 0.14.2 - PullRequest
0 голосов
/ 09 февраля 2020

Я пытался расположить многоугольник, используя 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/

Заранее благодарим за любые идеи, которые вы, ребята, можете иметь.

С уважением Опция

...