【问题标题】:modification in the animation of vertical lines with processing通过处理修改垂直线的动画
【发布时间】:2016-02-20 21:46:49
【问题描述】:

我已经修改了由 .在最近的代码中,我需要更改代码生成的两个行数组之间的值,并使行逐渐消失。所有离开或进入的行之间应该有相同的间距。下面是代码。

    //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);
}

【问题讨论】:

    标签: animation processing


    【解决方案1】:

    要使行间距始终保持不变,您必须确保总行间距加起来等于屏幕的总宽度。现在每条线占用 75 像素(50 用于线本身,25 用于线后的空间),但您的宽度为 640。这总是会给您留下额外的空间,这会在线条重新开始后弄乱您的间距。

    所以最简单的做法就是让你的窗口成为行距的倍数。让我们使用600,它的空间正好可以容纳 8 行。

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

    如果我理解您所说的“逐渐”重新启动线条的意思,您只需在它们的右侧离开屏幕时重新启动它们。换句话说,当它们的 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;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多