我正在尝试做一个项目,其中将显示不同的图像取决于某人与超声波范围传感器的距离。我正在使用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);
...
如果我需要将更多代码放在这里,我也可以这样做。
答案 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语句