当我单击特定对象上的右键时,它开始进行动画处理。但是,无论我单击相同的对象(动画一个)还是停止其他没有动画的对象,动画对象都会停止。但是,我希望动画对象仅在单击时才停止。
如何解决此问题?这是我的onClick和onTimer函数。我应该在结构中使用动画布尔吗?如果可以,怎么办?
if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
for(i=0; i<MAX; i++){
if(mx >= arr[i].xB + 0 && mx <= arr[i].xB + 130 && my <= arr[i].yB + 17 && my >= arr[i].yB + - 17){
animation = !animation;
animationNumber = i;
printf("TRUE\n");
}
}
void onTimer( int v) {
glutTimerFunc( TIMER_PERIOD, onTimer, 0) ;
if(animation){
arr[animationNumber].xB++;
if(arr[animationNumber].xB >= 640)
arr[animationNumber].xB -= 1410;
}
glutPostRedisplay() ; // display()
}
答案 0 :(得分:1)
使用数组bool animation[MAX]
代替单个布尔变量animation
和索引变量animationNumber
。
使用此解决方案,每个对象都有其自己的状态,该状态指示它是“正在动画制作”还是静止不动。
bool animation[MAX] = {};
按下鼠标按钮,更改数组中对象的相应状态:
if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
for (i=0; i<MAX; i++)
{
if (mx >= arr[i].xB + 0 && mx <= arr[i].xB + 130 &&
my <= arr[i].yB + 17 && my >= arr[i].yB + - 17)
{
animation[i] = !animation[i];
printf("TRUE\n");
}
}
}
遍历计时器函数中的所有对象并更新对象的位置:
void onTimer( int v)
{
glutTimerFunc( TIMER_PERIOD, onTimer, 0) ;
for (i=0; i<MAX; i++)
{
if(animation[i])
{
arr[i].xB++;
if( arr[i].xB >= 640)
arr[i].xB -= 1410;
}
}
glutPostRedisplay();
}