如何在processingJS中创建一个空的int数组?

时间:2013-11-21 05:58:48

标签: java arrays processing

我正在尝试创建大量的int值并尝试将它们添加到空的int数组中,但它不起作用。我已按原样添加了我的代码。如果你只是插上它就可以工作。所有有问题的部分都被注释掉了。

我真正想做的就是让它使用我希望它使用的完美颜色。所以创建了一个代表颜色的数字列表,我需要将这些颜色添加到一个数组中,这样我就可以用填充来初始化它们。所以问题是如何将所有这些值添加到空int数组中。

int rotationCount = 0;
int translateX ;
int translateY ;
int currentTime = 0;
int circlesOrLines ;
int timeLimit ;
int r;
int g;
int b;
//int[] values = new values [];
int maxValue = 226;
int minValue = 75;
int timeIndex = 0;

void setup () {
  size(500, 700);
  r = 226;
  g = 226;
  b = 75;

  smooth();
  background(0);
  rectMode(CENTER);
  frameRate (10);
  noStroke();
  fill(r, g, b, 30);
  translateX = width/2;
  translateY = height/2;
   timeLimit = 10000;
   circlesOrLines = 0;
   currentTime = millis();
   //generateColor ();

}

void draw () {
  background(80);
/*  
  timeIndex++;
  if (timeIndex >= values.length){
   timeIndex = 0; 
  }
  fill(values [timeIndex] , values [timeIndex + 1], values [timeIndex + 2], 30);

  */
  fill(r, g, b, 30);
  int passedTime = millis() - currentTime;
  println (" the passed time is " + passedTime);

  translate(translateX % width, translateY % height);


  translateX += 3 % width;
  translateY += 3 % height;

  rotationCount += (PI/2008);
  if (passedTime < timeLimit) {
    makeCircles ();
  }
  else {
    if (passedTime >=20000)
    {
      passedTime = 0;
      currentTime = millis();
    }
    makeLines ();

 }
}
void makeCircles () {

  for (int i = 0; i < 25; i++) {
    rotate (rotationCount);
    ellipse(i+7, i % width, 100, height/2);
  }
}

void makeLines () {
  for (int i = 0; i < 25; i++) {
    rotate (rotationCount);
    rect(i+7, i % width, 100, height/2);
  }
}
/*
void generateColor () {

                       for (g=g; g>minValue; g--)
                       {
                               values.push (r,g,b);
                       }
                       for (r=r; r>minValue; r--)
                       {
                               values.push (r,g,b);
                       }
                       for (b=b; b<maxValue; b++)
                       {
                               values.push (r,g,b);
                       }
                       for (g=g; g<maxValue; g++)
                       {
                               values.push (r,g,b);
                       }
                       for (r=r; r<maxValue; r++)
                       {
                               values.push (r,g,b);
                       }
                       for (b=b; b>minValue; b--)
                       {
                               values.push (r,g,b);
                       }


               }

*/

EDIT --------

JAVASCRIPT MODE:

enter image description here

1 个答案:

答案 0 :(得分:1)

我已经粘贴了一个有效的解决方案。您的代码中存在一些错误。

首先,确保声明您使用的内容。您在代码中使用values但是您已经删除了声明。 Javascript将允许调用null对象,这就是你在对象上调用.push()并且它正在编译但不能正常工作的原因。

其次,将颜色保留为color个对象,并使用ArrayList存储它们。它更易于管理,并且允许您在Java和Javascript版本的处理器之间移动而不会出现问题(Java中的数组上不存在.push()方法)。

最后,当您通过调用fill()查找颜色时,您使用的是timeIndex,它与颜色数组的长度不同,从而导致异常。我已经更改了查找以使用frameCount和ArrayList长度的模数来保持它在颜色中振荡,但也防止了越界错误。

结果看起来非常好。做得好。

int rotationCount = 0;
int translateX ;
int translateY ;
int currentTime = 0;
int circlesOrLines ;
int timeLimit ;
int r;
int g;
int b;
ArrayList values;
int maxValue = 226;
int minValue = 75;
int timeIndex = 0;

void setup () {
    size(500, 700);
    r = 226;
    g = 226;
    b = 75;

    smooth();
    background(0);
    rectMode(CENTER);
    frameRate (10);
    noStroke();
    fill(r, g, b, 30);
    translateX = width/2;
    translateY = height/2;
    timeLimit = 10000;
    circlesOrLines = 0;
    currentTime = millis();


    values = new ArrayList();  
    generateColor ();

}

void draw () {
    background(80);

    fill( values.get( frameCount % values.size()));
    int passedTime = millis() - currentTime;

    translate(translateX % width, translateY % height);

    translateX += 3 % width;
    translateY += 3 % height;

    rotationCount += (PI/2008);
    if (passedTime < timeLimit) {
        makeCircles ();
    }
    else {
        if (passedTime >=20000)
        {
            passedTime = 0;
            currentTime = millis();
        }
        makeLines ();

    }
}
void makeCircles () {

    for (int i = 0; i < 25; i++) {
        rotate (rotationCount);
        ellipse(i+7, i % width, 100, height/2);
    }
}

void makeLines () {
    for (int i = 0; i < 25; i++) {
        rotate (rotationCount);
        rect(i+7, i % width, 100, height/2);
    }
}


void generateColor () 
{

    for (g=g; g>minValue; g--)
    {
        values.add (color(r,g,b,30));
    }
    for (r=r; r>minValue; r--)
    {
        values.add (color(r,g,b,30));
    }
    for (b=b; b<maxValue; b++)
    {
        values.add (color(r,g,b,30));
    }
    for (g=g; g<maxValue; g++)
    {
        values.add (color(r,g,b,30));
    }
    for (r=r; r<maxValue; r++)
    {
        values.add (color(r,g,b,30));
    }
    for (b=b; b>minValue; b--)
    {
        values.add (color(r,g,b,30));
    }
}