通过处理修改垂直线条的动画

时间:2016-02-20 21:46:50

标签: animation processing

我修改了由给定的垂直线条动画的代码。在最近的代码中,我需要更改由代码生成的两个行数组之间的值,并使行逐渐消失。离开或离开的所有线路之间应具有相同的间距。以下是代码。

 
    //float[] linePositions = new float[10];
    ArrayList<Integer> linePositions = new ArrayList<Integer>();
    int lineWidth = 50;
    int lineSpacing = 25;
    int lineSpeed = 1;
    int totalwidth;
    int pixelperframe = 0;

    int arraySize = 0;

    void setup() {
    size(640, 360);
    println("Setup");
    totalwidth = lineWidth+lineSpacing;
    for (int i = 0; i < width; i=i +totalwidth) {
    //Float value =  0 + (lineWidth+lineSpacing)*i;
    linePositions.add(i);
    }
    arraySize = linePositions.size();

    }
    Boolean drawn = false;
    void draw() {
    println("Draw");
    background(51);

    //loop through the lines
    //println("before Draw ka forloop"+linePositions.size());\

    pixelperframe = ((lineSpeed - 10) > 1) ? (lineSpeed-10) : 1; 

    for (int i = 0; i < arraySize; i++) {

    //println("Draw ka forloop");



    rect(linePositions.get(i), 0, lineWidth, width); 

    int newPosition =  linePositions.get(i) - pixelperframe ;
    linePositions.set(i, newPosition);
    //linePositions[i] -= lineSpeed;

    //wrap the line
    if ( linePositions.get(i) < 0) { 
      println("Wrapping the line");
      linePositions.set(i, width);
     // drawn = true;
    }
    }
  //int temp = (width - linePositions.get(arraySize - 1)) - totalwidth;
  //println(temp);
}

1 个答案:

答案 0 :(得分:0)

如果线条之间的间距始终相同,则必须确保总线间距与屏幕的总宽度相加。现在每行占用75个像素(线本身50个,后面空间25个),但你的宽度是640.这将总是给你留下额外的空间,这会在线条重新开始后弄乱你的间距。

所以最简单的方法就是简单地让你的窗口成为行间距的倍数。让我们选择600,这对于正好8行就足够了。

但是,由于您希望线条从屏幕滑落,实际上您需要9条线,因为您经常会看到一条线的一半离开屏幕而另一条线的一半进入屏幕。画一些图片,看看我在说什么

如果我理解你的意思,那就是逐渐地制作线条&#34;重新启动,只需在右侧离开屏幕时重新启动它们。换句话说,当他们的x位置足够负以离开屏幕时。

总而言之,它看起来像这样:

 
float[] linePositions = new float[9];

float lineWidth = 50;
float lineSpacing = 25;
float lineSpeed = 1;

void setup() {
  size(600, 360);

  for (int i = 0; i < linePositions.length; i++) {
    linePositions[i] = (lineWidth+lineSpacing)*i;
  }
}

void draw() {
  background(51);

  for (int i = 0; i < linePositions.length; i++) {

    linePositions[i] -= lineSpeed;

    rect(linePositions[i], 0, lineWidth, height); 

    if ( linePositions[i] < -(lineWidth+lineSpacing)) { 
      linePositions[i] = width;
    }
  }
}