Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript,Matter.js:增加圆的半径_Javascript_Physics Engine_Matter.js - Fatal编程技术网

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

JavaScript,Matter.js:增加圆的半径,javascript,physics-engine,matter.js,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 = Ma

我有一个小的脚本示例,其中有一个圆(半径: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>

var发动机=物质发动机,
世界=物质。世界,
物体=物质。物体
engine=engine.create(document.body,{render:{options:{wireframes:false}}})
engine.render.options.background=“#7F7F”
地面=实体。矩形(400590800,20,{isStatic:true})
添加(engine.World,ground)
圆=实体。圆(400,20,40,{render:{fillStyle:“#0000ff”})
添加(engine.World,圆圈)
发动机。运转(发动机)
设置超时(增加半径,1500)
函数increaseRadius(){
圆圈圈=80
}

我的猜测是,使用您的方法,您还必须再次调用World.add(engine.World,circle),并可能删除半径较小的前一个圆,因为引擎使用的是圆的副本。
或者,您可以在主体上调用scale方法:

,但是所有其他物理都消失了,至少如果圆在移动。但我明白了,如果我能恢复这些东西……我假设当你们把它传递给世界时,并没有指向你们创建的全局圈的指针,但它的副本已经创建了。因此,当您更改圆的半径时,它不会影响实际使用的副本。您可以在主体上调用缩放方法:谢谢!,请更新后,这样我就可以为该项目评分answer@benbo是的,如果创建后需要更改实体的大小,则应使用
Body.scale
。请注意,
body.circleRadius
仅用作更平滑圆渲染的提示。关于禁用碰撞的问题,请参见