第一次道歉未能正确表达我的问题!

我面临的问题是我有一个包含4个类的数组列表,它们执行完全相同的操作,只是它们需要在不同的时间(当第一个坐标超过某个值时)被调用,但是Im很难完成它,并且不能在网上找到它(可能是因为我不能准确地说出我的问题:/),无论如何,我将在下面发布我的代码,如果有人可以提供一些帮助,我将万分感谢!

**即时通讯是通过将屏幕的中心与每个角线连接在一起而形成的隧道效应,现在我正在尝试通过模拟从屏幕中间朝向边缘的起始线(从底部开始)来进行移动**

    speedLines sline1, sline2, sline3, sline4;

// holds speedLines classes
ArrayList<speedLines> gameObject;

void setup() {
  background(0);
  size(750, 750);
  smooth();

  gameObject = new ArrayList<speedLines>();

  sline1 = new speedLines(height/2);
  sline2 = new speedLines(height/8);
  sline3 = new speedLines(height/4);
  sline4 = new speedLines((height/2)*3);

  gameObject.add(sline1);
  gameObject.add(sline2);
  gameObject.add(sline3);
  gameObject.add(sline4);
}

void draw() {
  background(0);
  for(int i=0; i< gameObject.size(); i++){

    // go through the different classes
    // 2 added so far
    gameObject.get(i).display();

  }
  Guidelines();
}
//GLOBAL VARIABLES
int line=0;
int linewidth=0;




void Guidelines() {
  stroke(255);
  //MAIN GUIDE
  line(0, 0, width/2, height/2);//top left guide
  line(width, 0, width/2, height/2);//top right guide
  line(0, height, width/2, height/2);//bottom left guide
  line(width, height, width/2, height/2);//bottom right guide
  //SUB GUIDE
  stroke(60, 60, 60);
  line(width/3, height, width/2, height/2);//sub guide left
  line((width/3)*2, height, width/2, height/2);//sub guide right
}
class speedLines {
  //Global variables
  int Y;

  speedLines(int y) {
  }

  void display() {
    stroke(60, 60, 60);
    line((width/2)-linewidth, (height/2)+line, (width/2)+linewidth, (height/2)+line);
    line++;
    linewidth++;
    if ((height/2)+line >= height)
    {
      line=0;
      linewidth=0;
    }
  }
}

最佳答案

如果我是您,我会尝试将其缩小到较小的示例草图。我还会尝试清理一下您的代码:将它们放在sline中时,是否有一个草图级的ArrayList变量是有原因的?

话虽如此,我会尽力帮助。您正在将参数传递给speedLines类(由于类应以大写字母开头,并且每个实例仅代表一行),因此应真正称为SpeedLine构造函数,但您永远不要使用该参数。尝试使其仅与一个实例一起使用,如下所示:

Line myLine;

void setup() {
  size(100, 500);
  myLine = new Line(height/2);
}

void draw() {
  background(200);
  myLine.move();
  myLine.render();
}

class Line {
  float lineY;

  public Line(float lineY) {
    this.lineY = lineY;
  }

  public void move() {
    lineY++;
    if (lineY > height) {
      lineY = 0;
    }
  }

  public void render() {
    line(0, lineY, width, lineY);
  }
}


请注意,我实际上是如何使用传递给lineY构造函数的Line变量的。尝试在您的代码中获得类似的功能。然后,使用ArrayList绘制多条线会更容易:

ArrayList<Line> myLines = new ArrayList<Line>();

void setup() {
  size(100, 500);
  for (float lineY = 0; lineY < height; lineY += 100) {
    myLines.add(new Line(lineY));
  }
}

void draw() {
  background(200);

  for (Line myLine : myLines) {
    myLine.move();
    myLine.render();
  }
}

class Line {
  float lineY;

  public Line(float lineY) {
    this.lineY = lineY;
  }

  public void move() {
    lineY++;
    if (lineY > height) {
      lineY = 0;
    }
  }

  public void render() {
    line(0, lineY, width, lineY);
  }
}


还要注意,您实际上只在类中真正使用过一个值(在我的示例中为lineY变量)。因此,您可能实际上不需要一门课就可以做到这一点。您可能只用保存float值的lineY值数组来执行此操作:

float[] lineY = new float[10];

void setup() {
  size(100, 500);
  for (int i = 0; i < lineY.length; i++) {
    lineY[i] = i * 10;
  }
}

void draw() {
  background(200);

  for (int i = 0; i < lineY.length; i++) {
    lineY[i]++;
    if (lineY[i] > height) {
      lineY[i] = 0;
    }
    line(0, lineY[i], width, lineY[i]);
  }
}


请注意,所有这些都只是示例,您必须拿起这些示例并了解它们在做什么,然后在代码中执行类似的操作。祝好运。

10-08 18:10