C ++ / OF迭代每次迭代改变属性的对象?

时间:2011-07-25 21:40:09

标签: c++

我要做的是:创建一系列矩形,每个框架彼此相邻生成。每个矩形的高度基于当时的声音频率,然后迭代器移动到下一个矩形,使最后一个保持适当的高度。

发生了什么:屏幕变成了一个很大的奇异块,所有的空间都在频率上下不断地上下移动...我似乎无法让它一次迭代一次,而不是一直不断地改变它们

我认为我的问题是:我不知道如何让每个迭代存储并保存自己的值,即使这些值是对象的一部分......

有问题的守则:

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

如何正确实施?

2 个答案:

答案 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>