0

我正在做一个项目,在这个项目中,我试图想象足球队随着一年的时间在队伍中上下移动的日志。

我将代表团队的图像保存到一个数组中,并在绘图函数中调用它。现在我想使用 shapetween 补间他们的动作,但我不知道在哪里初始化团队的 x 和 y 位置。如果我尝试全局初始化它们,我会收到以下错误消息:

Cannot reference a field before it is defined

当我尝试在本地初始化 x 和 y 值时,它说它们需要初始化。我的代码在下面,我在使用 OS X 的 Mac 上运行 Processing 2.0b7,虽然它可能没有显示我已将 shapetween 库添加到草图中:

 PImage[] images = new PImage[17];
    PImage img = new PImage();
    float x1; //Current x-coord
    float y1; //Current y-coord
    float x2;
    float y2;
    float x = lerp(x1, x2, ani.position());
    float y = lerp(y1, y2, ani.position());
    Tween ani;
    void setup() {
      size(600, 1600);
      frame.setResizable(true);
      for (int i = 0; i < images.length; i++) {
        images[i] = loadImage(i + ".png");
      }
      for (int i = 0; i < images.length; i++) {
        images[i].resize(200, 60);
      }
      ani = new Tween(this, 2, Tween.SECONDS);
      background(0);
    }
    void draw() {
      image(images[0], 400, 100);
      image(images[1], 100, 100);
      image(images[2], 100, 160);
      image(images[3], 100, 220, 100, 160);
      image(images[4], 100, 280);
      image(images[5], 100, 340);
      image(images[6], 100, 400);
      image(images[7], 100, 460);
      image(images[8], 100, 520);
      image(images[9], 100, 580);
      image(images[10], 100, 640);
      image(images[11], 100, 700);
      image(images[12], 100, 760);
      image(images[13], 100, 820);
      image(images[14], 100, 880);
      image(images[15], 100, 940);
      image(images[16], 100, 900);
    }
    void mousePressed() {
      ani.start();
    }
4

1 回答 1

0

您的问题是您不能在声明和构造它之前引用“ani”。即,

float x = lerp(x1, x2, ani.position());
float y = lerp(y1, y2, ani.position());

在您声明和构造之后,必须执行以下行:

Tween ani;
void setup() {
  ani = new Tween(this, 2, Tween.SECONDS);
}

否则,你指向的东西还不存在。

在这里试试这个代码:

PImage[] images = new PImage[17];
PImage img = new PImage();
float x1, y1, x2, y2, x, y;
Tween ani;

void setup() {
  size(600, 1600);
  frame.setResizable(true);
  for (int i = 0; i < images.length; i++) {
    images[i] = loadImage(i + ".png");
  }
  for (int i = 0; i < images.length; i++) {
    images[i].resize(200, 60);
  }
  ani = new Tween(this, 2, Tween.SECONDS);
  // values to x1, x2, y1 and y2 should be assigned here
  x = lerp(x1, x2, ani.position());
  y = lerp(y1, y2, ani.position());
  background(0);
}
void draw() {
  image(images[0], 400, 100);
  image(images[1], 100, 100);
  image(images[2], 100, 160);
  image(images[3], 100, 220, 100, 160);
  image(images[4], 100, 280);
  image(images[5], 100, 340);
  image(images[6], 100, 400);
  image(images[7], 100, 460);
  image(images[8], 100, 520);
  image(images[9], 100, 580);
  image(images[10], 100, 640);
  image(images[11], 100, 700);
  image(images[12], 100, 760);
  image(images[13], 100, 820);
  image(images[14], 100, 880);
  image(images[15], 100, 940);
  image(images[16], 100, 900);
}
void mousePressed() {
  ani.start();
}

顺便说一句,你可以做得比在绘图循环中每个图像调用使用一行更好。试一试 for 循环!

于 2013-01-24T20:24:39.237 回答