我正在尝试做一个小游戏,在我的游戏中我有一些方块,当用户点击这些方块时,它们会被突出显示。为了达到这个效果,我使用glutMouseFunc
with glutTimerFunc
。
当用户点击屏幕时,我选择像素并确定我需要突出显示的正方形。一旦确定了正方形,我就会调用glutTimerFunc
. 注册的函数glutTimerFunc
将颜色的每个分量的值增加 0.01,直到它们达到我定义的一个最大值,然后该值回到最小值。
glutTimerFunc
在 60 毫秒内执行,我得到了几乎平滑的光泽效果。
我的问题是,如果我非常快速地单击两个方块,效果会从第一个方块开始,但不会结束,所以方块仍然突出显示,第二个方块完成整个效果。如果我像疯子一样点击每个方格,所有方格都会突出显示。
即使单击其他方块,如何使这种发光效果终止?
这是一段代码
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,则调用。