Direct2D C ++ Пользовательский ввод

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

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

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

0

Решение

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

Другие решения

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

0

По вопросам рекламы [email protected]