初学者,如果术语不正确或者我可能没有像我需要的那样描述(或太描述),我们深表歉意。 ***编辑:我试图不发布我所有的代码,但看起来这是必要的,所以我更新了这篇文章。
我正在使用非常基本的浮动气泡在 Processing 中创建草图。为此,我在第二个选项卡中创建了一个名为 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 像素......但是为什么呢?为什么它可以访问我分配的高度,但不能访问宽度?
尝试将构造函数重新做成这样:
class Bubble {
int x;
int y;
int d;
int s;
color c;
Bubble(int xcoord, int ycoord, int ddd, int sss, color myColor){
x = xcoord;
y = ycoord;
d = ddd;
s = sss;
c = myColor;
}
}
类中还需要有一些方法,至少是一个display(),你没有或者至少没有发布。
终于修好了!问题实际上是第一个选项卡的前三行,试图同时声明和初始化 b1、b2 和 b3。相反,我需要在全局范围内声明,然后在 setup() 内部进行初始化。有点让我觉得自己很愚蠢,但是,哦,好吧。无论如何,这里是:
Bubble b1;
Bubble b2;
Bubble b3;
void setup(){
size(1200,800);
b1 = new Bubble();
b2 = new Bubble();
b3 = new Bubble();
}
现在气泡会在整个屏幕上产生。 :)
也就是说,这仍然让我想知道我的班级如何能够访问高度而不是宽度。但是,这解决了它,所以我接受它,哈哈。