我要做的是:创建一系列矩形,每个框架彼此相邻生成。每个矩形的高度基于当时的声音频率,然后迭代器移动到下一个矩形,使最后一个保持适当的高度。
发生了什么:屏幕变成了一个很大的奇异块,所有的空间都在频率上下不断地上下移动...我似乎无法让它一次迭代一次,而不是一直不断地改变它们
我认为我的问题是:我不知道如何让每个迭代存储并保存自己的值,即使这些值是对象的一部分......
有问题的守则:
float bldgHeighTemp;
for (int i = 0; i < 1000 ; i+=30){
for (int f = 0; f < (int)(BUFFER_SIZE/2); f++){
bldg temp;
bldgs.push_back(temp);
bldgs[i].bldgPosX = i;
bldgs[i].bldgPosY = ofGetHeight()/2;
bldgs[i].bldgWidth = 30;
bldgs[i].bldgHeight = bldgHeighTemp;
bldgs[i].draw();
bldgHeighTemp = freq[f]*-6;
}
}
如何正确实施?
答案 0 :(得分:0)
您设置bldgs[i].bldgHeight = bldgHeighTemp;
,然后设置bldgHeighTemp = freq[f]*-6;
秒。换句话说,bldgHeighTemp
在设置之前就已使用。
您的内部循环在每次迭代时向bldgs
添加一个新项目,但即使在推送新项目后也使用相同的bldgs[i]
。我不太确定我能弄清楚你实际上想要做什么。
答案 1 :(得分:0)
我会这样重写:
float bldgHeighTemp;
for (int i = 0; i < 1000 ; i+=30){
for (int f = 0; f < (int)(BUFFER_SIZE/2); f++){
bldg temp;
temp.bldgPosX = i;
temp.bldgPosY = ofGetHeight()/2;
temp.bldgWidth = 30;
temp.bldgHeight = freq[f]*-6;
temp.draw();
bldgs.push_back(temp);
}
}
您的代码存在的问题是它添加的元素多于分配属性的元素,请确保您理解它。
说BUFFER_SIZE == 10
,然后内部循环(for( int f =...
)将运行5次,因此blgds.push_back()
将被称为1000 * 5 = 5000次!但是您只能分配到blds[i]
,其中i < 1000
(这由循环标题保证)。因此,blgs[i]
i >= 1000
,其中大多数对象都是未初始化的。{/ p>