私は小さなゲームをしようとしています.私のゲームにはいくつかの正方形があり、ユーザーがこれらの正方形をクリックすると強調表示されます. この効果を得るために、私は を使用glutMouseFunc
していglutTimerFunc
ます。
ユーザーが画面をクリックすると、ピクセルが選択され、強調表示する必要がある正方形が特定されます。正方形が識別されたら、 を呼び出しますglutTimerFunc
。登録されている関数glutTimerFunc
は、色の各コンポーネントの値を、私が定義した最大値に達するまで 0.01 ずつ増やします。その後、この値は最小値に戻ります。
glutTimerFunc
60 ミリ秒で実行すると、ほぼ滑らかな輝きの効果が得られます。
私の問題は、2 つの四角形を非常に速くクリックすると、最初の四角形で効果が開始されますが、終了しないため、四角形が強調表示されたままになり、2 つ目の四角形が全体の効果を発揮することです。すべての四角を狂ったようにクリックすると、すべての四角が強調表示されました。
他の四角をクリックしてもこの光る効果を止めるにはどうすればいいですか?
ここにコードのスニペットがあります
void Memoria::shineEffect(GLint value) {
if(value == 1) {
for(GLint i = 0; i < 3; i++) {
if(colors[selectedSquare][i] > 0) {
colors[selectedSquare][i] += COLOR_INCREASE;
if(colors[selectedSquare][i] >= MAX) {
colors[selectedSquare][i] = MAX;
value = -1;
}
}
}
glutTimerFunc(FPS, timeWrapper, value);
}
else {
if(value == -1) {
for(GLint i = 0; i < 3; i++) {
if(colors[selectedSquare][i] > 0) {
colors[selectedSquare][i] -= COLOR_INCREASE;
if(colors[selectedSquare][i] <= MIN) {
value = 0;
colors[selectedSquare][i] = MIN;
}
}
}
glutTimerFunc(FPS, timeWrapper, value);
}
}
}
timeWrapper
shineEffect
パラメータで渡された値が 1 または -1 の場合に呼び出します。