関数のスコープ外で宣言された列挙型を関数に渡そうとしています。これにより、関数内の列挙型の値を変更すると、指す列挙型の値が変更されます。この列挙型の複数の異なるインスタンスでこの関数を使用したいので、オブジェクトのスコープ内で列挙型自体を使用することはオプションではありません。
列挙型「ColourState」があります。そのように宣言した。ColourState へのポインター。
enum ColourState {COLOUR1, COLOUR2};
ColourState* CS_GO_score;
ポインタはそのように初期化されました。
CS_GO_score = new ColourState;
*CS_GO_score = ColourState::COLOUR2;
CSS_GO_score が指す ColourState を関数 'pulsateColour' に渡そうとしています。
そのようです。
void HUD::pulsateColour(GLfloat *colour1, GLfloat *colour2, GLfloat *objectCol, ColourState goingTo, int timeInFrames)
{
GLfloat difference[4];
//give us an array of values to change the array by in the alloted time
difference[0] = (colour1[0]-colour2[0])/timeInFrames;
difference[1] = (colour1[1]-colour2[1])/timeInFrames;
difference[2] = (colour1[2]-colour2[2])/timeInFrames;
difference[3] = (colour1[3]-colour2[3])/timeInFrames;
//depending on the state, transform the array in one direction or another
if(goingTo == ColourState::COLOUR2)//if we're moving toward colour 2
{
for(int i = 0; i<4; i++)
{
objectCol[i] -= difference[i];//subract the difference till we get there
//we need to SNAP to the colour as we will not hit it every time using floats
if( (objectCol[i]>(colour2[i]-(difference[i]*2))) && (objectCol[i]<(colour2[i]+(difference[i]*2))) )
{//if we hit this tiny but huuuge target
objectCol[i] = colour2[i];//SNAP
}
}
}else{
if(goingTo == ColourState::COLOUR1)
{
for(int i = 0; i<4; i++)
{
objectCol[i] += difference[i];//add the difference till we get there
//we need to SNAP to the colour as we will not hit it every time using floats
if( (objectCol[i]>(colour1[i]-(difference[i]*2))) || (objectCol[i]<(colour1[i]+(difference[i]*2))) )
{//if we hit this tiny but huuuge target
objectCol[i] = colour1[i];//SNAP
}
}
}
}
if((objectCol[0] == colour1[0])&&(objectCol[1] == colour1[1])&&(objectCol[2] == colour1[2])&&(objectCol[3] == colour1[3]))
{//if the objcolour == colour 1
goingTo = ColourState::COLOUR2;//it's now time to move towards colour 2
}else{
if((objectCol[0] == colour2[0])&&(objectCol[1] == colour2[1])&&(objectCol[2] == colour2[2])&&(objectCol[3] == colour2[3]))
{//if the objcolour == colour 2
goingTo = ColourState::COLOUR1;//it's now time to move towards colour1
}
}
}
}
この関数はそのように呼び出されます。
pulsateColour(white,blue, GO_scoreColour, *CS_GO_score, 10);
ただし、「goingTo」と「CS_GO_score」による値ポインター (これらは同じアドレスである必要があるため、技術的には同じオブジェクトですよね?) の場合、VS で値モニターを監視すると、「goingTo」が指す値のみが表示されます (関数に対してローカルであるため)変更されましたか?私は何を間違っていますか?