2016-08-19 78 views
2

我将p5js scetch转换为处理,因为我想生成一个mov文件。该scetch基于丹尼尔shiffman在kadenze的教程,但我现在有一个布尔输出的问题。我怎样才能在处理中编写这段p5js代码?将p5js草图转换为处理的问题

function draw() { 
    for(var i = 0; i < particles.length; i++) { 
    if(particles[i].isDead()) { 
    //code 
    } 
    } 
} 

function Particles() { 
    this.isDead = function() { 
    var distance = p5.Vector.sub(attractor.pos, this.pos); 
    var d = distance.mag(); 

    if(d < 5) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 

首先我尝试了void,但void没有得到输出。然后我用布尔值尝试了这样的事情,但它也没有工作。

void setup() { 
    //code 
} 

void draw() { 
    for (int i = 0; i < particles.length; i++) { 
    if(particles[i].isDead()) { 
     //code 
    } 
    } 
} 

Class Particle { 
    Particle() { 
    //code 
    } 

    boolean isDead() { 
    PVector distance = PVector.sub(a.location, location); 
    float d = distance.mag(); 

    if(d < 5) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 

如果有人能帮助我,那将会很棒。

问候马蒂亚斯

+0

你能否提供[mcve]?现在你错过了“粒子”以及“a”和“位置”的声明。 –

回答

1

第一个问题是,你是不是曾经实际上做任何事情,如果isDead()回报true。您需要将代码放在if语句中,或者将if语句移到符合逻辑的地方。

例如,你可以修改你的display()功能您Mover类中以绿色画时Mover死:

void display() { 
    if (isDead()) { 
     fill(0, 255, 0); 
    } else { 
     fill(255, 0, 0); 
    } 
    stroke(0); 
    strokeWeight(2); 

    ellipse(location.x, location.y, 10, 10); 
    } 

这只是一个例子,你实际上做什么取决于你想要什么发生在Mover已死亡。

但是,即使您进行了此更改,您也会注意到Mover仅在到达灰色圆圈中间时才会死亡。这是因为你的isDead()功能这里面if声明:

PVector distance = PVector.sub(a.location, location); 
float d = distance.mag(); 
if (d < 5) { 
    return true; 
} else { 
    return false; 
} 

你测量的灰色圆圈的中心位置和每个小红圈的中心之间的距离。但你只返回true如果d < 5。问题在于灰色圆圈的直径为50,所以如果你想让小红色圆圈在进入灰色圆圈时死亡,则必须将该直径计入你的计算中。请尝试使用if(d < 30)代替。我通过将直径50除以2,然后将小圆圈大小加上5得到30。您可能需要使用它来获得您要查找的效果。

顺便说一下,您可能对dist()函数感兴趣,该函数返回两点之间的距离。更多信息可在the reference找到。

+0

很酷,非常感谢你:) – pundes