2013-09-23 4 views
0

Я смущен тем, как приложения обрабатывают ввод мыши с помощью Direct2D.Direct2D C++ User input

Рассмотрим случай:

  1. Say Я нарисовал мяч на окне. Если переместить курсор над мячиком, он изменит цвет.
  2. Означает ли это, что приложение должно опросить мышь и проверить, находится ли курсор над мячом почти каждую секунду времени работы приложения.
  3. Разве это не снижает производительность, если у вас больше предметов? Есть ли другой способ, чем опрос, который, другими словами, является кучей if-утверждений.

ответ

1
  1. Вам необходимо выполнить тест на попадание при перемещении мыши или при перемещении шара.
  2. Эффективное испытание на удар/обнаружение столкновений является главной проблемой в разработке игр. Если производительность становится проблемой, обнаружение столкновения обычно выполняется в два этапа: «широкая фаза» и «узкая фаза». Один подход для широкой фазы: quad trees (для двух измерений): пространство (окно) разделено на «секции»; каждый мяч и мышь назначаются разделу в соответствии с их положением. Только шары, находящиеся в той же секции, что и мышь, являются кандидатами на узкую фазу. В узкой фазе вы просто проверяете кандидатов, переживших широкую фазу.
0

Обычно приложения прослушивают событие WM_MOUSEMOVE и обновляют любые затронутые объекты в обработчике событий (или сигнализируют объекты события изменения в случае, если это дорогостоящая операция). Коду рендеринга не нужно запрашивать, где находится курсор мыши.

+0

Там произошло тестирование на мероприятии WM_MOUSEMOVE, которое в основном опросило каждый кадр. – bluejamesbond

+0

Не могли бы вы прояснить, что вы имеете в виду? Если код обновляет модель на событиях WM_MOUSEMOVE, то он не опросит каждый кадр, поскольку WM_MOUSEMOVE не является механизмом опроса. Windows отправит событие при перемещении мыши. – gigaplex

+0

@ gigaplex.Таким образом, я хочу сказать, что ... Хотя WM_MOUSEMOVE не является методом опроса, логика определяет, что ваш курсор в определенной области окна очень похож на опрос. Каждый пиксель, над которым движется ваша мышь, вы должны пройти весь список элементов, которые вы нарисовали, чтобы увидеть, есть ли ваша мышь, если на этом элементе в случае, если эти элементы имеют поведение при перемещении мыши. Разве это не будет очень медленным? – bluejamesbond