Прекращение действия, если клавиша отжата(glut)
|
|
Bazilik_xD | Дата: Понедельник, 06 Мая 2013, 09:13 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Код void move_RIGHT(void) { x1cb+=0.1; x2cb+=0.1; glutPostRedisplay(); }
void SpecialFunc(int key, int x, int y) { if(key == GLUT_KEY_LEFT) glutIdleFunc(move_LEFT); if(key == GLUT_KEY_RIGHT) glutIdleFunc(move_RIGHT); if(key == GLUT_KEY_UP) glutIdleFunc(move_UP); if(key == GLUT_KEY_DOWN) glutIdleFunc(move_DOWN); }
такая проблема, я нажимаю клавишу "вправо", и объект до бесконечности двигается вправо, даже если я отпускаю клавишу(( как решить проблему?
|
|
| |
Lord_Zeon | Дата: Понедельник, 06 Мая 2013, 09:24 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| void glutIdleFunc(void (*func)(void)); - Функция, которая устанавливает функцию в вашей программе, которая будет вызываться системой всякий раз, когда ваше приложение простаивает, т.е. ничего не делает. Часто эту функцию используют для анимации.
Дальше объяснять наверное не нужно.
|
|
| |
Bazilik_xD | Дата: Пятница, 10 Мая 2013, 17:31 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| А все, разобрался. Решил проблему так Код void move_RIGHT(void) { x+=0.1; glutPostRedisplay(); }
void SpecialFunc(int key, int x, int y) { if(key == GLUT_KEY_LEFT) glutIdleFunc(move_LEFT); if(key == GLUT_KEY_RIGHT) glutIdleFunc(move_RIGHT); if(key == GLUT_KEY_UP) glutIdleFunc(move_UP); if(key == GLUT_KEY_DOWN) glutIdleFunc(move_DOWN); }
void timf(int value) { glutPostRedisplay(); glutTimerFunc(40, timf, 0); }
|
|
| |
Edison6 | Дата: Пятница, 10 Мая 2013, 21:30 | Сообщение # 4 |
TRUE Programmer
Сейчас нет на сайте
| Можно проще: Код void move_RIGHT(void) { x+=0.1;
}
void SpecialFunc(int key, int x, int y) { if(key == GLUT_KEY_LEFT) move_LEFT(); if(key == GLUT_KEY_RIGHT) move_RIGHT(); if(key == GLUT_KEY_UP) move_UP(); if(key == GLUT_KEY_DOWN) move_DOWN(); }
void timf(int value) { glutPostRedisplay(); glutTimerFunc(40, timf, 0); }
Берил сбрей усы
Сообщение отредактировал Edison6 - Пятница, 10 Мая 2013, 21:30 |
|
| |
Bazilik_xD | Дата: Суббота, 11 Мая 2013, 08:46 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата (Edison6) Можно проще: Код Код void move_RIGHT(void) { x+=0.1;
}
void SpecialFunc(int key, int x, int y) { if(key == GLUT_KEY_LEFT) move_LEFT(); if(key == GLUT_KEY_RIGHT) move_RIGHT(); if(key == GLUT_KEY_UP) move_UP(); if(key == GLUT_KEY_DOWN) move_DOWN(); }
void timf(int value) { glutPostRedisplay(); glutTimerFunc(40, timf, 0); }
Хех, я так и сделал, просто свой листинг не правильно скопировал ^^
|
|
| |