JavaScript、Matter.js:增加圆的半径

Pro*_*key 5 javascript physics-engine matter.js

我有一个小示例脚本,其中有一个圆(半径: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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ben*_*nbo 3

我的猜测是,使用您的方法,您还必须再次调用 World.add(engine.world, Circle) ,并可能删除先前半径较小的圆,因为引擎使用圆的副本。或者,您可以在主体上调用缩放方法:http://brm.io/matter-js-docs/classes/Body.html#method_scale

  • @benbo 是对的,如果您需要在创建后更改主体的大小,则应该使用“Body.scale”。请注意,“body.circleRadius”仅用作更平滑的圆形渲染的提示。关于您有关禁用碰撞的问题,请参阅/sf/ask/2287868271/ (2认同)