将p5js草图转换为处理的问题

时间:2016-08-19 20:35:47

标签: javascript java processing

我将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

1 个答案:

答案 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找到。