我将p5js scetch翻译为处理因为我想生成一个mov文件。 scetch是基于daniel shiffman关于kadenze的教程,但我现在遇到一个布尔输出问题。如何在处理中编写这段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;
}
}
}
如果有人可以帮助我,那就太棒了。
关于mattias
答案 0 :(得分: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
只有在到达灰色圆圈的中间时才会死亡。这是因为if
函数中的isDead()
语句:
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找到。