2015-09-20 39 views
2

我有一个小例子脚本,其中有一个圆形(半径:40),落在地面上。但是,当我增加其半径80则,只有圆的图形似乎改变,但在物理学:JavaScript,Matter.js:增加圆的半径

<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

回答

2

我的猜测是,你的方法,你还可以打电话给世界.add(engine.world,circle)再次并且可能的是,由于该引擎与该圆的副本一起工作,因此可以移除具有较小半径的前一个圆。 或者,您可能可以调用身体上的缩放方法:http://brm.io/matter-js-docs/classes/Body.html#method_scale

+0

但是随后所有其他物理都消失了,至少如果圆圈正在移动。但我明白了,如果我可以恢复这些东西。 – Unknown

+0

我假设当你将它传递给世界但是创建它的一个副本时,没有指向你创建的全局圆的指针。因此,当您更改圆的半径时,它不会影响实际使用的副本。 – benbo

+0

您可能可以调用正文的缩放方法:http://brm.io/matter-js-docs/classes/Body.html#method_scale – benbo