Opengl, движение прямоугольника при удержание клавиш
| |
cann | Дата: Воскресенье, 28 Марта 2021, 16:27 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| В программу ввел возможность перемещение прямоугольника вправо и влево при удержании клавиш, но движение прямоугольника, иногда, начинается с одна-двух секундной задержкой при смене направления движения влево или вправо. Код очень прост и по ходу анализа кода я не вижу ни одного участка, где бы эта задержка может возникать. Помогите, пожалуйста, в устранение данной неприятности. Если есть более элегантное решение реализации перемещения прямоугольника, плавное перемещение, перемещение без рывков, то прошу рассказать о нем.
Код program ogl_p2;
uses gl,glut,glu;
const AppWidth = 640; AppHeight = 480; n = 4;
type rectIndexArr = array[1..n] of Glfloat; var player_rect: rectIndexArr; posx1, posx2: Real; stepx: Real;
procedure ReshapeCallback(width, height: Integer); cdecl; begin
end;
procedure DisplayCallback; cdecl; begin glClearColor(1/255.0, 11/255.0, 25/255.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glBegin( GL_QUADS ); glColor3f( 3/255.0, 33/255.0, 74/255.0 ); glVertex2f( -1, 1 ); glVertex2f( 1, 1 ); glVertex2f( 1, -1 ); glVertex2f( -1, -1 );
glColor3f(5/255.0, 55/255.0, 123/255.0); glVertex2f( -0.95, 0.95 ); glVertex2f( 0.95, 0.95 ); glVertex2f( 0.95, -0.95 ); glVertex2f( -0.95, -0.95 ); glEnd;
posx1 := posx1+stepx; posx2 := posx2+stepx;
if posx1>0.95 then begin posx1:=0.95; posx2:=0.90; end; if posx2<-0.95 then begin posx1:=-0.90; posx2:=-0.95; end;
glColor3f( 183/255.0, 183/255.0, 183/255.0 ); glRectf(posx1, player_rect[2], posx2, player_rect[4]);
glutSwapBuffers(); end;
procedure SpecialKeyboardCallback(key: Integer; x,y: Integer); cdecl; begin case key of GLUT_KEY_F1: Halt(0); GLUT_KEY_LEFT: begin stepx := -0.025; end; GLUT_KEY_RIGHT: begin stepx := 0.025; end; end; glutPostRedisplay(); end;
procedure SpecialKeyboardUpCallback(key: Integer; x,y: Integer); cdecl; begin stepx := 0.0;
glutPostRedisplay();
end;
procedure IdleCallback(); cdecl; begin glutPostRedisplay(); end;
procedure Init; begin stepx := 0.0; player_rect[1] := -0.025; player_rect[2] := -0.85; player_rect[3] := 0.025; player_rect[4] := -0.9;
posx1 := player_rect[1]; posx2 := player_rect[3]; end;
procedure main(); begin glutInit(@argc, argv); glutInitWindowSize(AppWidth, AppHeight); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB or GLUT_DOUBLE or GLUT_DEPTH);
glutCreateWindow('TestApp'); Init;
glutReshapeFunc(@ReshapeCallback); glutDisplayFunc(@DisplayCallback);
glutSpecialFunc(@SpecialKeyboardCallback); glutSpecialUpFunc(@SpecialKeyboardUpCallback); glutIdleFunc(@IdleCallback);
glutMainLoop(); end;
begin main(); end.
Сообщение отредактировал cann - Воскресенье, 28 Марта 2021, 17:29 |
|
| |
Sanchez06 | Дата: Воскресенье, 28 Марта 2021, 20:11 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Скорее всего, это из-за задержки повторения клавиш. Вот для Windows: https://answers.microsoft.com/ru-ru/windows/forum/all/настройк/748ab24d-7eeb-4d4d-824d-303ea85ba55c Другой, более функциональной библиотеки для обработки нажатий клавиш нет? Вижу, что это какой-то диалект паскаля, но что это, понять не могу
|
|
| |
cann | Дата: Понедельник, 29 Марта 2021, 07:42 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Цитата Скорее всего, это из-за задержки повторения клавиш. Вот для Windows: https://answers.microsoft.com/ru-ru/windows/forum/all/настройк/748ab24d-7eeb-4d4d-824d-303ea85ba55c
По началу смена направления нормально работает, а потом, иногда, одна-двух секундная задержка, потом бывает нормально опять. Попробую предложенное вами решение настроить задержку повторения клавиш в Windows.
Цитата Другой, более функциональной библиотеки для обработки нажатий клавиш нет? Конечно, я попробую стандартные вызовы обработки нажатия клавиш Windows, такие как getkeystate, надеюсь это поможет. Но, хотелось бы понять можно ли реализовать, перемещение прямоугольника влево и вправо без задержек средствами библиотеки glut?
Цитата Вижу, что это какой-то диалект паскаля, но что это, понять не могу Среда Lazarus, компилятор FPC.
Добавлено (06 Апреля 2021, 16:32) --------------------------------------------- Вопрос решен. Всем спасибо за ответы.
|
|
| |
|