1

我试图在 matter.js 网站上复制一个示例,但无法使其正常工作。我试图将我的代码布局与确实有效但没有的项目相同......

    var Engine = Matter.Engine,
    World = Matter.World,
    Bodies = Matter.Bodies;

    var world;

    var engine;
    var particles=[];

function Particles(x,y,r){
  this.x=x;
  this.y=y;
  this.d=r*2;
  this.body=Bodies.circle(x,y,r);
  World.add(world,this.body);
  this.disp=function(){
    fill(255);
    ellipse(x,y,this.d, this.d);
  }

}



function setup() {
createCanvas(600,400);
engine = Engine.create();
world=engine.world;
Engine.run(engine);
rect1=Bodies.rectangle(width/2,height/2,10,150);
World.add(world,rect1);



}

function mousePressed(){
  particles.push(new Particles(mouseX,mouseY,5));
}

function draw() {
  background(51);

Engine.update(engine);
  push();
  rectMode(CENTER);
  rect(width/2,height/2,10,150);
  pop();

  for (var i = 0; i < particles.length; i++) {
    particles[i].disp();



}}

所以基本上问题是我可以用鼠标创建的粒子不会移动(以及矩形),但它们在 world.bodies 中被引用(当我在 chrome 中使用控制台时)。我不知道为什么它不工作......我使用 p5.js 作为 javascipt 环境(它有点像处理)

4

1 回答 1

2

请在发布之前尝试正确格式化您的代码。至少使用适当的缩进。

但你的问题是这一行:

ellipse(x,y,this.d, this.d);

每当您绘制粒子时,您都在使用传递给构造函数的原始变量x和变量。y你永远不会改变这些值,所以你的粒子永远不会移动。

您正在使用物理引擎,但您永远无法从物理引擎中获取粒子的位置。要解决您的问题,您需要查阅 matter.js 库的文档。

具体来说,body 文档包含有关该body.position字段的信息,其中包含物理引擎更新的 body 的位置。

ellipse(this.body.position.x, this.body.position.y, this.d, this.d);
于 2017-03-12T16:00:07.677 回答