在Processing中压缩一个大的“else else if”语句

时间:2014-03-31 01:16:53

标签: arduino processing

我正在尝试做一个项目,其中将显示不同的图像取决于某人与超声波范围传感器的距离。我正在使用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);
...

如果我需要将更多代码放在这里,我也可以这样做。

3 个答案:

答案 0 :(得分: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;    
}

答案 1 :(得分: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]

范围内

修改

正如@cup在评论中提到的,这对标准的Arduino工具集不起作用,所以你需要将expresion改为像这样的思考:

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

答案 2 :(得分:-1)

尝试使用一个Switch语句

http://arduino.cc/en/Reference/SwitchCase