Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IFree Host
Заблокирован
#1

Перехват клавиатуры во время анимации (C++, OpenGL) - C++

26.02.2012, 03:43. Просмотров 772. Ответов 0
Метки нет (Все метки)

Доброго времени суток.

Приступил к изучению OpenGL. Начать решил с самого простого чтобы погружение было как можно приятнее

Для начала решил написать старую добрую "змейку".

Пошел по протореной дорожке:
1. Создал класс CZmejka.
2. Определился с функциями про- и перерисовки
3. Раскопал как перехватывать клавиатуру
4. написал цикл для анимирования.

"змейка" заползала.... НО перехват больше не работает.

В консоли я сделал это так и там все работает:

C++
1
2
3
4
5
6
7
8
char input = 0;
 
while(true)
{
    if (kbhit()) input = getch();
    ...
    ...
}
Но тут другие печеньки.
В моем коде это выглядит так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void CZmejka::Move()
{
        int i_tick = 0;
        char c_input = 0;
 
        while(true)
        {
                i_tick++;
 
                Sleep(3);
                if(i_tick >= speed)
                {       
                        Repaint();
 
                        if(kopf < 500) ++kopf;
                        else kopf = 0;
                        if(schwanz < 500) ++schwanz;
                        else schwanz = 0;
 
                        switch(c_richtung)
                        {
                                case 'o': 
                                        if(y_location > 40) ++y_location; 
                                        else y_location = 0; 
                                        break;
                                case 'u':
                                        if(y_location > 0) --y_location; 
                                        else y_location = 40; 
                                        break;
                                case 'r': 
                                        if(x_location < 50) ++x_location; 
                                        else x_location = 0; 
                                        break;
                                case 'l': 
                                        if(x_location > 0) --x_location; 
                                        else x_location = 50; 
                                        break;
                        }
 
                        Zmejka[x][kopf] = x_location;
                        Zmejka[y][kopf] = y_location;
                        Paint();
                        i_tick = 0;
                }
        }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void keyboardSpecialUp(int rawKeyCode, int x, int y)
 {
         CZmejka zmejka;
 
     switch (rawKeyCode)
     {
         case GLUT_KEY_LEFT:
        zmejka.c_richtung = 'l';
        printf("Key down");
             break;
         case GLUT_KEY_UP:
        zmejka.c_richtung = 'o';
             break;
         case GLUT_KEY_RIGHT:
        zmejka.c_richtung = 'r';
             break;
         case GLUT_KEY_DOWN:
        zmejka.c_richtung = 'u';
             break;
     }
 }
 
int main(int argc, char **argv)
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(500,400);
        glutInitWindowPosition(100,50);
        glutCreateWindow(argv[0]);
        glutDisplayFunc(myDisplay);
        glutReshapeFunc(myReshape);
        //glutMouseFunc(myMouse);
        //glutKeyboardFunc(Keyboard);
        glutSpecialFunc(keyboardSpecialUp);
        myInit();
        glutMainLoop();
        return 0;
}
Как пойди правильно к решению?
Заранее благодарен за советы и помощь!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 03:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перехват клавиатуры во время анимации (C++, OpenGL) (C++):

Большое время перерисовки OpenGL - C++
Здравствуйте, я студент 2 курса, учусь на программиста, решил начать писать какую ни будь простенькую изометрическую игрушку, и наткнулся...

Определить время через K (вводится с клавиатуры) секунд - C++
Задачки сверхпростые...но вот чего-то не выходит..общая идея то понятна - она везде там одинакова практически, а как все это собрать не...

Составить программу с оператором for которая суммирует 14 целых чисел вводимых с клавиатуры во время программы - C++
Всем привет! Помогите составить программу с оператором for которая суммирует 14 целых чисел вводимых с клавиатуры во время программы, еще...

Перехват клавиатуры во время анимации - OpenGL
Доброго времени суток. Приступил к изучению OpenGL. Начать решил с самого простого чтобы погружение было как можно приятнее :) ...

Время Анимации - C++ Builder
Ребят Помогите плз //--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma...

Перехват клавиатуры - C#
Здравствуйте! Нужна ваша помощь! Необходимо отловить нажатие клавиши, (если не трудно, лучше комбинации клавиш), даже если форма неактивна....

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 03:43
Привет! Вот еще темы с ответами:

перехват клавиатуры - Delphi
на клавиатуре есть пара спец кнопок (www,email) по нажатию запускаются по-умолчанию браузер и почт.клиент. кода их известны: ...

Пересчет во время анимации - Программирование iOS
Добрый день. что-то не нахожу простого решения в гугле. Поэтому прошу ваших идей. делаю анимацию для Вьюхи (которая состоит из...

AS 2.0 Ускорение анимации с помощью клавиатуры - ActionScript
Здравствуйте подскажите пожалуйста как зделать так что бы при нажатии на кнопку CTRL мой объект ускорялся. объект управляется кнопка...

Перехват событий с клавиатуры - Visual C++
Добрый день! Как заставить диалоговое окно перехватывать события нажатия клавиатуры? Пытался WM_KEYDOWN, ни чего получается, по нажатии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru