有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我将p5js scetch转换为processing,因为我想生成一个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;
    }
  }
}

如果有人能帮助我,那就太好了

问候马蒂亚斯


共 (1) 个答案

  1. # 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;
    }
    

    你在测量灰色圆的中心和每个红色小圆圈的中心之间的距离。但是如果d < 5,你只返回true。问题是灰色圆圈的直径是50,所以如果你想让红色的小圆圈在进入灰色圆圈时消失,你必须在计算中考虑这个直径。试着改用if(d < 30)。我用直径除以50得到30,然后加上5作为小圆圈的大小。你可能需要用它来获得你想要的效果

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