这是我在加工中的课程......
class Stripe {
PShape s;
float x, y, w;
static Stripe lastStripe;
Stripe() {
x = width / 2;
y = 0;
w = 150;
s = createShape();
s.beginShape();
s.fill(0);
s.noStroke();
s.vertex(w, 0);
s.bezierVertex(w + 50, height * 1/4, w - 50 , height * 1/3, w, height);
s.vertex(0, height);
s.bezierVertex(-50, height * 1/3, 50 , height * 1/4, 0, 0);
//s.vertex(0, 0);
//s.bezierVertex(50, 50, 50, 50, 100, 100);
s.endShape(CLOSE);
}
void draw() {
pushMatrix();
translate(x, y);
shape(s);
popMatrix();
}
void move() {
x = x + STRIPE_VEL;
if (x > (width + OFFSCREEN_BUFFER)) {
x = Stripe.lastStripe.x - STRIPE_SPACING;
Stripe.lastStripe = this;
}
}
}
当我尝试编译时,我收到以下错误......
字段lastStripe只能声明为static;静态字段只能在静态或顶级类型中声明
看看这个Java tutorial,这似乎是一个有效的Java模式。虽然上面的代码是自引用的,但如果类型更改为int
或类似,它仍会引发相同的错误。
这里有什么问题?
编辑:根据要求,这是另一个标签中草图的其余部分。我开始认为处理方式只是将这些变量声明为全局'而不是类上的静态变量...我可能只是这样做。
float STRIPE_VEL = 0.5;
float OFFSCREEN_BUFFER = 500;
float STRIPE_SPACING = 50;
int numStripes = 0;
Stripe[] stripes;
void setup() {
float offset = 0;
size(800, 600, P2D);
smooth();
numStripes = (width + 2 * OFFSCREEN_BUFFER) / STRIPE_SPACING;
stripes = new Stripe[numStripes];
for (int i=0; i < numStripes; i++) {
stripes[i] = new Stripe();
stripes[i].x = offset;
offset = offset + inc;
}
Stripe.lastStripe = stripes[0];
}
void draw() {
background(255);
for (int i=0; i < numStripes; i++) {
stripes[i].draw();
stripes[i].move();
}
//blurAll();
}
答案 0 :(得分:2)
尝试将特定文件(即Stripe.pde)重命名为Stripe.java。你在那里评论是对的:&#34;编译处理将它嵌入到另一个类&#34;中,实际上处理草图中的所有选项卡都包含在一个大的java(顶级)类中......所以,重命名其中一个.java将迫使它成为顶级班级!
答案 1 :(得分:1)
将内部类Stripe
更改为声明为static
(内部)类:
static class Stripe {
...
}
这将确保Stripe
每个Stripe
实例不需要封闭类的实例,并且您将能够创建类变量(静态字段)
作为旁注,如果内部类static
实际上不需要封闭类的实例,那么创建内部类{{1}}总是更好的做法。