2014-03-31 70 views
2

我試圖做一個項目,其中不同的圖像將顯示依賴於某人與超聲波距離傳感器的距離。我使用的是Processing和Arduino,共有37張圖片。現在,儘管我只是有一個大規模的「別的如果」的聲明來控制圖像顯示的距離,但是坦率地說它看起來相當醜陋。有沒有辦法清理它?縮小一個大的「}否則,如果{」處理中的語句

這是什麼樣子

if(val == 42) { 
     img = loadImage("a_frame1_0.jpg"); 
     image(img, 0, 0); 
    } else if (val == 41) { 
     img = loadImage("a_frame1_1.jpg"); 
     image(img, 0, 0); 
    } else if (val == 40) { 
     img = loadImage("a_frame1_2.jpg"); 
     image(img, 0, 0); 
    } else if (val == 39) { 
     img = loadImage("a_frame1_3.jpg"); 
     image(img, 0, 0); 
    } else if (val == 38) { 
     img = loadImage("a_frame1_4.jpg"); 
     image(img, 0, 0); 
    } else if (val == 37) { 
     img = loadImage("a_frame1_5.jpg"); 
     image(img, 0, 0); 
    } else if (val == 36) { 
     img = loadImage("a_frame1_6.jpg"); 
     image(img, 0, 0); 
    } else if (val == 35) { 
     img = loadImage("a_frame1_7.jpg"); 
     image(img, 0, 0); 
... 

如果我需要在這裏放更多我的代碼,我能做到這一點。

+2

將文件名放在數組中。然後你結束了'path = images [val]; img = loadImage(path);圖片(img,0,0);' – ikegami

+2

@ ikegami的想法(+1)是我原先想到的,但如果你有一個總體趨勢,你知道不會有例外,你可以真正做到:' img = loadImage(「a_frame1_」+(42-val)+「.jpg」);' – jeremy

+0

如果文件名是可預測的,那麼路要走肯定會生成像Jeremy所示的文件名。 – ikegami

回答

2

使用for循環?

int min = 0; 
int max = 42; 

for (int i = max; i >= min; i--){ 

    if(val != i){ 
    continue; 
    } 

    img = loadImage("a_frame1_" + (max - i) + ".jpg"); 
    image(img, 0, 0); 
    break;  
} 
2

我想這個大的語句放在您的draw()函數中。每次繪製場景時加載圖像非常耗時,並且可能會在像arduino這樣的平臺上出現問題,因此我建議您將所有圖像加載到setup()函數中,並按照@ikegami的建議將它們存儲在數組中,然後使用一些循環來存儲這些圖像(我建議你重命名有問題的名字,所以你可以使用簡單的字符串連接)

PImage[] images = new PImage[MAX]; //MAX = 37 

setup() { 
    for (int i = 0; i < MAX; i++) { 
    images[i] = loadImage("a_frame1_" + i + ".jpg");  
    } 
} 

然後顯示圖像取決於所處的位置您draw()函數中

image(images[42-val], 0, 0); 

只要你要小心關於索引,所以他們將在範圍[0,36]

編輯

正如所以你需要改變expresion到somethink像這樣的評論中提到的標準的Arduino工具集這不會工作@cup:

loadImage(String("a_frame1_") + i + ".jpg") 
+1

Very C#ish語法。這不會像現在這樣編譯。建議將表達式更改爲** String(「a_frame1_」)+ i +「.jpg」** – cup

+0

是的,也許是C#ish語法,但它可以編譯並與[Processing 2]一起使用(http://www.processing.org /) – Majlik

+0

公平 - 我沒有意識到那個工具 - 我只是使用沼澤標準的Arduino工具集。 – cup