提问人:Natalie Pockett 提问时间:4/29/2023 最后编辑:Natalie Pockett 更新时间:4/30/2023 访问量:82
构造函数可以读取高度,但不能读取宽度?
Constructor can read height, but not width?
问:
初学者,所以如果术语不对,或者我可能没有我需要的描述(或描述太多),请道歉。编辑:我试图不发布我所有的代码,但看起来这是必要的,所以我更新了这篇文章。
我正在使用非常基本的浮动气泡在处理中创建一个草图。为此,我在第二个选项卡中创建了一个名为 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/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
好点子。当然,在所有代码发布之前,我们无法知道这是问题所在。
评论