| Прекращение действия, если клавиша отжата(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);
 }
 Хех, я так и сделал, просто свой листинг не правильно скопировал ^^
 
 
   |  |  |  |  |