JavaScript,Matter.js:增加圆形半径

5

我有一个小例子脚本,其中有一个半径为40的圆形物体掉落到地面上。但是当我将其半径增加到80时,只有圆形物体的图形似乎发生了变化,而物理效果并没有改变:

<html>
<body></body>
</html>
<script src="matter.js"></script>
<script>
var Engine = Matter.Engine,
    World = Matter.World,
    Bodies = Matter.Bodies
engine = Engine.create(document.body,{render:{options:{wireframes: false}}})
engine.render.options.background = "#7f7f7f"
ground = Bodies.rectangle(400,590,800,20,{isStatic:true})
World.add(engine.world, ground)
circle = Bodies.circle(400,20,40,{render:{fillStyle:"#0000ff"}})
World.add(engine.world, circle)
Engine.run(engine)
setTimeout(increaseRadius, 1500)

function increaseRadius(){
  circle.circleRadius = 80
}
</script>

enter image description here

1个回答

3
我猜想,使用你的方法,你还需要再次调用World.add(engine.world, circle)函数,并且可能需要删除之前半径较小的圆形,因为引擎是使用圆形的副本进行操作的。或者,你可以在Body上调用scale方法:http://brm.io/matter-js-docs/classes/Body.html#method_scale

但是如果圆在移动,那么所有其他的物理现象都消失了。但是我想,如果我能够恢复这些东西... - d0n.key
你可以在body上调用scale方法:http://brm.io/matter-js-docs/classes/Body.html#method_scale - benbo
顺便问一下,在我为此打开另一个线程之前,您知道有没有办法关闭单个物体的碰撞?这样它就可以穿过所有其他物体了吗? - d0n.key
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/90178/discussion-between-unknown-and-benbo。 - d0n.key
2
@benbo是正确的,如果您需要在创建后更改物体的大小,则应使用Body.scale。请注意,body.circleRadius仅用作平滑圆形渲染的提示。关于您有关禁用碰撞的问题,请参见https://dev59.com/olwY5IYBdhLWcg3wYW5X - liabru
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接