136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
1 | |
GUI и проверка координат мыши02.04.2023, 16:37. Показов 600. Ответов 10
Метки нет (Все метки)
Здравствуйте,
Пытаюсь реализовать простой графический интерфейс на основе рисования примитивов с помощью OpenGl(обертки) и получается такая вещь, что при отрисовки каждого кадра - приходится проверять координаты курсора мыши на "столкновение" с каждый элементом GUI: кнопок, менюшек, ползунков. То есть даже если курсор мыши не двигается и вообще условный пользователь ушел спать, то код, который контролирует GUI, просто будет молотить 30-60 кадров в секунду проверки на "столкновение" всех элементов GUI c курсором мыши. Это вообще так и делается или это не нормально так тратить процессорное время ?
0
|
02.04.2023, 16:37 | |
Ответы с готовыми решениями:
10
Опять же проверка координат мыши Проверка координат мыши Проверка координат курсора мыши Получение координат элемента или координат мыши на элементе При опросе координат курсора и состояния кнопок мыши (int 33h ax=0003h), значение координат не изменяется |
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
|
|
03.04.2023, 00:10 | 2 |
По событиям от мыши.
0
|
576 / 477 / 100
Регистрация: 05.08.2022
Сообщений: 2,626
|
|
03.04.2023, 09:35 | 3 |
Что есть
? Что за "столкновение" такое? что из него следует, какие действия? Обычно на мышь программа реагирует по нажатию кнопки - только тогда и есть смысл обрабатывать координаты. Или у вас картинка меняется просто от движения мыши? Впрочем, выше уже сказали, что обрабатывать надо только события мыши, надеюсь в вашем фреймворке они есть.
0
|
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
|
|
03.04.2023, 12:05 | 4 |
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
03.04.2023, 12:07 [ТС] | 5 |
Я рисую в окне к примеру кнопку - то есть обычный закрашенный прямоугольник с координатами. Положение нарисованной кнопки не меняется.
Курсор мыщи естественно двигается по окну и постоянно меняет координаты. Мне естественно нужно знать зашел ли курсор мыши в область моей нарисованной кнопки. Поэтому каждый кадр приходится высчитывается положение курсора мыши на "столкновение" с моей кнопкой. Это не WinApi или подобные системы - где при клике вызывается колбек.
0
|
03.04.2023, 12:07 | 6 | |||||
Optimus11, однозначно так нельзя. Зачем вам обрабатывать координаты мыши даже тогда, когда они вам не нужны? Вы же кликаете на какие-то элементы gui, так значит по этому клику и обрабатывайте. Например, в
WinAPI можно добавить кейс WM_LBUTTONUP (срабатывает, когда отпускаете нажатую левую кнопку мыши в окне программы) в главную процедуру WindowProc . В таком случае координаты можно получить так:
LOWORD или HIWORD непосредственно, но рекомендовано использовать GET_X_LPARAM и GET_Y_LPARAM из windowsx.h .
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
03.04.2023, 12:08 [ТС] | 7 |
на основе рисования примитивов с помощью OpenGl(обертки)... отсюда ?
Добавлено через 57 секунд Ну я знаю как устроено в WInApi - но я же в данном случае его не использую.
1
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
03.04.2023, 12:29 [ТС] | 9 |
Да я думал об этом, проблема возникает, когда нужно сделать небольшие эффекты типа изменения цвета при наведении на элемент GUI или всплывающая подсказка.
0
|
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
|
|
03.04.2023, 12:36 | 10 |
Мне думается, что это нормально. Так оно и должно работать в игрушках. Оконная событийная модель тут не работает. Всё построено на одном цикле, в который помещаются обновления и рисование. При обновлении происходит анализ текущего состояния манипуляторов (мышь, клавиатура, джойстик и т.д.) и интерпретация этого состояния в соответствии с текущим окружением. В игре мышь может не двигаться, но при этом могут двигаться игровые объекты и попадать под текущую позицию мыши. Логика работы может требовать какой-нибудь динамической подсветки объекта под курсором. Если же говорить про оконный интерфейс в различных игровых меню, то там придётся самостоятельно "превращать" состояния манипуляторов в собственные "события".
1
|
03.04.2023, 12:45 | 11 |
для таких случаев все проверки можно сделать не в 30-60 кадров в секунду, а в 5 кадров в секунду, а то и меньше. Это можно сделать с помощью таймера.
Добавлено через 3 минуты Ygg, да, но даже в игровых движках не все проверки лепят в update или physics_update, которые обновляются 60 и более кадров в секунду. От грамотной разработки зависит уровень оптимизации. Потом еще многие жалуются, мол игра вроде простая, но железо очень грузится даже на топовых девайсах. Добавлено через 5 минут я встречал тормознутую игры, где разраб использовал рейкастинг в 60 кадров в секунду, в то время, как в этом не было необходимости. Поверьте, пользователю особо не важно, когда всплывет его подсказка при наведении на графический элемент - через 200 мс или 20 мс.
2
|
03.04.2023, 12:45 | |
03.04.2023, 12:45 | |
Помогаю со студенческими работами здесь
11
Перевод из декартовой системы координат в полярную (GUI) Нажатие правой кнопой мыши по GUI кнопке GUI, событие при наведении курсора мыши на ScrollBar Как без GUI слушать события клавиатуры/мыши? Вывод координат мыши Получение координат мыши в 3D Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |