Понедельник, 25 Ноября 2024, 09:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Прекращение действия, если клавиша отжата(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);  
}



Хех, я так и сделал, просто свой листинг не правильно скопировал ^^


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг