【问题标题】:Programming falling Domino bricks with delay in Processing对落下的 Domino 砖块进行编程,处理延迟
【发布时间】:2022-11-11 04:30:24
【问题描述】:

一般来说,我对处理和编码非常陌生,并试图对一排由椭圆激活的落下的多米诺砖进行编程。 我为直立的砖块和倒下的砖块编写了一个功能,但我只能让砖块同时倒下。 我正在寻找一种方法让它们一个接一个地倒下。如果有人可以帮助我,那就太好了。

到目前为止,这是我的代码 - 第一个标签:

Dom[] dominos = new Dom[20];
int m;
float x = 100;

void setup() {
  size (600, 600);
  for (int i=0; i < dominos.length; i++) {
    dominos[i] = new Dom();
  }
}

void draw() {
  background(0);

  if (m<91) {
    m = m + 1;
  }

  fill(0);
  ellipse(m, height/2 + 15, 20, 20);

  fill(255, 80, 0);
  ellipse (m, height/2 + 15, 20, 20);

  for (int i=0; i < dominos.length; i++) {
    if (m < 90)
      dominos[1].show();

    if (m >= 90)
      dominos[i].fall();
  }
}

第二个标签:

class Dom {
  float x = 100;
  float y = height/2 - 22.5;

  void fall() {
    push();
    stroke(255);
    strokeWeight(10);
    strokeCap(SQUARE);

    for (int i = 0; i<15; i++) {
      line (x + i*30 + 45, y+40, x + i *30, y+50);
    }
    pop();
  }

  void show() {
    push();
    stroke(255);
    strokeWeight(10);
    strokeCap(SQUARE);

    for (int i = 0; i<15; i++) {
      line (x + i*30, y, x + i *30, y+45);
    }
    pop();
  }
}``

【问题讨论】:

    标签: processing


    【解决方案1】:

    首先,看看你的 Dom.fall() 和 Dom.show() 在做什么。
    每个方法绘制 15 个矩形。
    接下来,看看你在用多米诺骨牌做什么。这是一个包含 20 个元素的数组。
    因此,在 draw() 中,您绘制了 15 个矩形,每帧刷新 20 次。

    基本上,您需要一个由 15 个对象组成的数组,每个对象绘制一个矩形。或者一个对象绘制 15 个矩形。但不是 20 个对象绘制 15 个矩形。

    因此,这是您的问题的更简单解决方案:

    Dom dominos;
    int m;
    
    void setup() {
      size (600, 600);
      dominos = new Dom();
    }
    
    void draw() {
      background(0);
      if (m<91) {
        m++;
      }
    
      fill(255, 80, 0);
      ellipse(m, height/2 + 15, 20, 20);
    
      if (m>=90) {
          dominos.fallenNumber++;
      }
      dominos.draw();
    }
    
    class Dom {
      float x = 100;
      float y = height/2 - 22.5;
      int fallenNumber = 0;
    
        void draw() {
            push();
            stroke(255);
            strokeWeight(10);
            strokeCap(SQUARE);
            for (int i=0; i<15; i++) {
                if (i<fallenNumber){
                        line (x + i*30 + 45, y+40, x + i *30, y+50);
                    } else {
                        line (x + i*30, y, x + i *30, y+45);
                }
            }  
            pop();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 2022-11-15
      相关资源
      最近更新 更多