2017-03-12 31 views
1

我想在matter.js网站上复制一个例子,我无法设法使它工作。我想展示我的代码相同,它没有工作,但没有项目...不能动画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环境(它有点像处理)

回答

1

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

但你的问题是这一行:

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

每当你抓的粒子,您正在使用的原xy变量传递到构造函数。你永远不会改变这些值,所以你的粒子永远不会移动。

你正在使用一个物理引擎,但你从来没有从物理引擎获取粒子的位置。要解决您的问题,您需要查阅关于matter.js库的文档。

具体而言,body documentation包含有关body.position字段的信息,其中包含物理引擎正在更新的物体的位置。

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