2013-01-24 31 views
0

我正在研究一個項目,其中我試圖查看足球隊在隊伍中上下移動的日誌。shapetween tweening數組中的多個元素

我將代表團隊的圖像保存到數組中,並在繪圖函數中調用它。現在我想用shapetween調整他們的動作,但我不知道在哪裏初始化隊伍的x和y位置。如果我嘗試初始化它們在全球範圍我收到此錯誤信息:

Cannot reference a field before it is defined 

,當我嘗試初始化x和y的值在本地,它說,他們需要被初始化。我的代碼如下,我使用OS X在Mac上運行處理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(); 
    } 

回答

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(); 
} 

順便說一句,你可以做得比使用每個圖像調用一行抽獎循環更好。給一個循環嘗試一個人!

+0

謝謝。我想盡快對代碼進行摺疊。問題是我仍然看不到補間。圖像移動的地方,但我沒有看到運動。請指教。 – Siya