我将p5js scetch转换为processing,因为我想生成mov文件。scetch是基于daniel shiffman在kadenze上的一个教程,但我现在遇到了一个布尔输出的问题。如何在processing中编写这段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没有输出。然后我试着用boolean做一些类似的事情,但同样不起作用。
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
发布于 2016-08-21 16:29:39
第一个问题是,如果isDead()
返回true
,那么您实际上并没有做任何事情。实际上,您需要将代码放在该if
语句中,或者将该if
语句移动到有逻辑意义的地方。
例如,您可以修改Mover
类中的display()
函数,使其在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;
}
您正在测量灰色圆圈的中心和每个红色小圆圈的中心之间的距离。但仅当d < 5
为。问题是灰色圆圈的直径是50,所以如果你想让红色的小圆圈在进入灰色圆圈时消亡,你必须在计算中考虑这个直径。请尝试使用if(d < 30)
。我将直径50
除以2
,然后为小圆大小添加5
,得到30。你可能不得不使用它来获得你想要的效果。
顺便说一下,您可能会对dist()
函数感兴趣,该函数返回两点之间的距离。更多信息可以在the reference上找到。
https://stackoverflow.com/questions/39047288
复制相似问题