【问题标题】:Having Trouble calling a class at different times在不同时间上课时遇到麻烦
【发布时间】:2016-11-10 23:04:16
【问题描述】:

首先很抱歉未能准确说出我的问题!

我面临的问题是我有一个包含 4 个类的数组列表,它们执行完全相同的操作,只是需要在不同时间调用它们(当第一个坐标超过某个值时)但我无法获取它完成了,但无法在网上找到它(可能是因为我无法准确说出我的问题:/)无论如何我会在下面发布我的代码,如果有人能提供一些启发,我将非常感激!

**我所做的是通过将屏幕中心与每个角用线条连接起来的隧道效果,现在我试图通过从屏幕中间向边缘开始的线条来模拟移动(从底部开始) **

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

【问题讨论】:

    标签: java processing


    【解决方案1】:

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

    话虽如此,我会尽力提供帮助。您正在将参数传递给 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 变量)。所以你可能真的不需要一个类来做到这一点。您可以只使用包含 lineY 值的 float 值数组来执行此操作:

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 2016-05-05
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多