构造函数可以读取高度,但不能读取宽度?

Constructor can read height, but not width?

提问人:Natalie Pockett 提问时间:4/29/2023 最后编辑:Natalie Pockett 更新时间:4/30/2023 访问量:82

问:

初学者,所以如果术语不对,或者我可能没有我需要的描述(或描述太多),请道歉。编辑:我试图不发布我所有的代码,但看起来这是必要的,所以我更新了这篇文章。

我正在使用非常基本的浮动气泡在处理中创建一个草图。为此,我在第二个选项卡中创建了一个名为 Bubble 的类:


class Bubble {

  int x;
  int y;
  int d;
  int s;
  color c;

  Bubble(){
    
    d = int(random(10, 100));
    x = int(random(d/2, width-d/2));
    y = height - d/2;
    s = int(random(-10, -1));
    c = color(random(255), random(255), random(255));
  }

  void render(){
    fill(c);
    circle(x, y, d);
  }
  
  void move(){
    y += s;
  }
  
  void reset(){
    if (y+d/2 <= 0){
      y = height-d/2;
    }
  }
}

现在,回到第一个选项卡,我有这个:

Bubble b1 = new Bubble();
Bubble b2 = new Bubble();
Bubble b3 = new Bubble();

void setup(){
  size(1200,800);
}

void draw(){
  background(0);
  
  b1.render();
  b1.move();
  b1.reset();
  println(b1.x);
  
  b2.render();
  b2.move();
  b2.reset();
  println(b2.x);
  
  b3.render();
  b3.move();
  b3.reset();
  println(b3.x);
}

当我运行它时,y 位置会按预期重置。但出于某种原因,圆圈拒绝在 x 轴上生成超过 80 多位。我认为这意味着它的宽度默认为 100 像素......但是为什么?为什么它可以访问我指定的高度,但不能访问宽度?

对象 构造函数 处理

评论

0赞 Natalie Pockett 4/29/2023
哦,对不起,我可以发誓我做到了 - 现在修好了。要回答,那就是 Java。不过,我正在使用 Processing 来编写所有这些内容,我被告知这有点像一个淡化的 Java - 不确定这是否属实,但我想我会包括这个花絮以防万一。
0赞 Kyle Lynch 4/29/2023
您需要提供更多代码。使用您提供的内容,我看不到您在哪里声明和初始化高度和宽度。如果我不得不猜测这是范围问题。或者,您需要将高度和宽度作为参数添加到气泡构造函数中。
1赞 Stephen C 4/29/2023
“我听说这有点像淡化了的Java。- 但它不是 Java。(提示:shandy是一种淡化啤酒,但它不是啤酒。
1赞 apodidae 4/29/2023
处理是一种基于 java 的语言,但它_not纯 java,可能不应该有这个标签。
1赞 apodidae 4/30/2023
Processing 编辑器在后台使用 Java,但让用户很容易使用它,因此我们不必直接使用它(尽管如果您真的想使用它,编辑器将运行纯 Java)。

答:

0赞 Natalie Pockett 4/30/2023 #1

我终于修好了!问题实际上是第一个选项卡的前三行,试图同时声明和初始化 b1、b2 和 b3。相反,我需要在全局范围内声明,然后在 setup() 中初始化。有点让我觉得自己很傻,但是,哦,好吧。无论如何,这里是:

Bubble b1;
Bubble b2;
Bubble b3;

void setup(){
  size(1200,800);
  
  b1 = new Bubble();
  b2 = new Bubble();
  b3 = new Bubble();
}

现在,气泡会沿着整个屏幕生成。:)

话虽如此,它仍然让我想知道我的班级是如何能够获得高度而不是宽度的。但是,这解决了它,所以我会接受它,哈哈。

评论

2赞 apodidae 4/30/2023
发布所有代码是一个很大的帮助。Setup() 只运行一次,因此气泡的参数在建立后不会改变,y 除外。我认为如果你有一个大约一百个气球的阵列在 x 轴上发射会更有趣。
0赞 Natalie Pockett 4/30/2023
绝对不是有趣的答案,但是正确的 - 我不需要颜色和 x 值就可以在同一运行中重置后进行更改。但话虽如此,现在我很好奇我是否能做到这一点,所以我可能会试一试。我可以使用练习哈哈。感谢您的帮助!(:
0赞 apodidae 4/30/2023
如果你设置一个数组,这是相当容易做到的;然后,您可以将数组的大小(气泡数)设置为您想要的任何大小。
2赞 Mruk 4/30/2023 #2

好的,您的示例不起作用的真正原因是因为环境以 100,100 的大小开始草图,而您稍后在 void 设置中更改为 800,600。
分析一下:

Out o1 = new Out("size before setup");

void setup () {
  size(512, 256);

  Out o2 = new Out("size after setup");
}

class Out {
  Out(String str) {
    println(str + ": " + width, height);
  }
}

输出:

size before setup: 100 100
size after setup: 512 256

Offcourse 您可以在 setup() 之前初始化和构造全局对象,但在这种情况下,您的宽度和高度将为 = 100。

评论

1赞 apodidae 4/30/2023
好点子。当然,在所有代码发布之前,我们无法知道这是问题所在。