Processing 处理:创建通过绘制循环改变大小的形状

Processing 处理:创建通过绘制循环改变大小的形状,processing,Processing,我正在尝试创建一个可视化,在这个可视化过程中,我的网络节点在一个循环中改变大小(为了简单起见,我去掉了节点之间的交互)。我有数组size,它在draw函数中循环,索引为j。我不知道为什么节点没有改变大小。如能深入了解此问题,将不胜感激 int numBalls = 5; Ball[] balls = new Ball[numBalls]; float[] sizes = {15,25,35,45,55,65}; void setup() { size(800, 400); int

我正在尝试创建一个可视化,在这个可视化过程中,我的网络节点在一个循环中改变大小(为了简单起见,我去掉了节点之间的交互)。我有数组
size
,它在
draw
函数中循环,索引为
j
。我不知道为什么节点没有改变大小。如能深入了解此问题,将不胜感激

int numBalls = 5;

Ball[] balls = new Ball[numBalls];

float[] sizes = {15,25,35,45,55,65};

void setup() {
  size(800, 400);
  int l = 0 ;
  for (int i = 0; i < numBalls; i++) {
    balls[i] = new Ball(random(width),random(height), random(30, 50), i, balls);
  }
  noStroke();
  fill(255, 204);
}

void draw() {
  background(0);
  for (int j = 0; j < 6; j++){
    for (int i = 0; i < numBalls; i++) {
    print("\nNEW ID\n");
    print(i);
    print("\n");
    print("Diameter in balls\n");
    print(balls[i].diameter);
    print("\n");
    balls[i].diameter = sizes[j];
    print("Diameter in balls after fix\n");
    print(balls[i].diameter);
    balls[i].display();  
    }
  }
}

class Ball {
  float x, y;
  float diameter;
  float mass; 
  float vx = 0;
  float vy = 0;
  int id;
  Ball[] others;

  Ball(float xin, float yin, float din, int idin, Ball[] oin) {
    x = xin;
    y = yin;
    diameter = din;
    mass = 50;
    id = idin;
    others = oin;
  } 

  void display() {
    textSize(32);
    fill(0,255,0,255);
    print("\nDiameter in display\n");
    print(diameter);
    print("\n");
    ellipse(x, y, diameter, diameter);
    print("\nDiameter in display\n");
    print(diameter);
    print("\n");
    fill(255, 0, 0, 255);
    text(id,x,y);
  }
}
int numBalls=5;
Ball[]balls=新球[numBalls];
浮动[]大小={15,25,35,45,55,65};
无效设置(){
尺寸(800400);
int l=0;
for(int i=0;i
问题是,在draw()函数中,使用第一个for循环运行大小数组,并将该大小的值分配给球。这样,在每次绘制()中,您随后会在每个球上附加每个大小,并且每次附加的大小都会覆盖上一个大小。。。请记住,处理窗口仅在draw()完成后刷新!您可能希望在每个draw()中使用不同的大小,而不是循环遍历每个draw()中的所有大小。因此,一种方法是:

int numBalls = 5;
int sizeCounter = 0;
int everySoManyFramesChange = 3;

Ball[] balls = new Ball[numBalls];
float[] sizes = {
  15, 25, 35, 45, 55, 65
};

void setup() {
  size(800, 400);
  int l = 0 ;
  for (int i = 0; i < numBalls; i++) {
    balls[i] = new Ball(random(width), random(height), random(30, 50), i, balls);
  }
  noStroke();
  fill(255, 204);
}

void draw() {
  background(0);
  for (int i = 0; i < numBalls; i++) {
    balls[i].diameter = sizes[sizeCounter];
    balls[i].display();
  }
  if (frameCount%everySoManyFramesChange == 0) sizeCounter=(sizeCounter+1)%sizes.length;
}
class Ball {
  float x, y;
  float diameter;
  float mass; 
  float vx = 0;
  float vy = 0;
  int id;
  Ball[] others;

  Ball(float xin, float yin, float din, int idin, Ball[] oin) {
    x = xin;
    y = yin;
    diameter = din;
    mass = 50;
    id = idin;
    others = oin;
  } 

  void display() {
    textSize(32);
    fill(0, 255, 0, 255);
    ellipse(x, y, diameter, diameter);
    fill(255, 0, 0, 255);
    text(id, x, y);
  }
}
int numBalls=5;
int-sizeCounter=0;
int everySoManyFramesChange=3;
Ball[]balls=新球[numBalls];
浮动[]大小={
15, 25, 35, 45, 55, 65
};
无效设置(){
尺寸(800400);
int l=0;
for(int i=0;i

顺便说一句,我删除了所有这些打印语句,因为它们使草图变得非常慢,但请随意,重新介绍它们

了解您在这里使用的语言会有所帮助。我假设Java???@winterblood是处理标签中提到的编程语言。@Majlik啊,谢谢。从未听说过它,所以我认为它只是一个通用标记,因为代码看起来像太多其他类似C语言的语言。