我找到了两种解决方案。
1- 创建一个类来包装 matter.js 主体,它也将保持高度和宽度。IE:
class rectWrapper {
constructor(x, y, width, height, options){
this.width = width
this.height = height
this.body = Matter.Bodies.rectangle(x, y, width, height, options)
}
}
2- 另一种方法是使用数学的魔法来确定两个坐标点之间的距离,使用 Body.vertices[0] 和 Body.vertices[1] 作为宽度,使用 Body.vertices[0] 和 Body.vertices[ 3] 高度。这也将解释任何轮换。此链接清楚地解释了它,对于 2 维和 3 维:
https://sciencing.com/calculate-distance-between-two-coordinates-6390158.html
我建议编写自己的“实用程序功能”来做到这一点。一个笨拙的例子可能看起来像这样:
function distance(x1, y1, x2, y2){
var x = Math.abs(x1-x2)
var y = Math.abs(y1-y2)
return Math.sqrt((x*x)+(y*y))
}
所以一个电话可能看起来像:
var rect = Matter.Bodies.rectangle(0,0,10,50)
var width = distance(rect.vertices[0].x, rect.verticies[0].y, rect.vertices[1].x, rect.vertices[1].y)
var height = distance(rect.vertices[0].x, rect.vertices[0].y, rect.vertices[3].x, rect.vertices[3].y)
或者,如果你碰巧使用 p5.js 作为你的渲染器,你可以使用 p5.dist() 它将 x1, y1, x2, y2 作为参数并返回距离(与上面的函数基本相同):
https://p5js.org/reference/#/p5/dist
请注意,这仅适用于矩形。如果您使用不同类型的几何图形,我可能会自己制作一个包装类。