Автор Тема: Баг с координатами при 2 мониторах  (Прочитано 379 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3627
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Баг с координатами при 2 мониторах
« : Декабрь 29, 2020, 03:31:29 pm »
На днях столкнулся с багом. Делал скрипт под Nox и в определённый момент часть кликов перестала проходить. Изучив проблему и проведя тесты что выяснил:
если больше одного монитора и на них стоит разное разрешение, то клики/перемещения в координаты превышающие меньший монитор (или дополнительный, тут ХЗ) сбрасываются в X1max. Важно! Это происходит не всегда, а только если окно кликера (главное или редактор) находятся на меньшем мониторе.

Мой пример.
Есть 2 монитора. Основной левый 1920x1080. Дополнительный правый 1600x900
$_xmax, $_ymax кликер выдаёт 3519x1079 что суммарно правильно.

Вот демонстрационный код
Код: Clickermann
  1. MOVE(1000, 900)
  2. LOGWRITE("X/Y  ", $_xmouse, "/", $_ymouse)
  3. HALT

На тесте пере6двигаем в координаты 1000x900 которые присутствуют всегда и находятся в области первого монитора.
Заметим, что Y больше чем максимум второго монитора 899.

При нахождении окна кликера на основном мониторе кликер двигает правильно в
Цитировать
15:18:59 X/Y  1000/900

При нахождении окна кликера на дополнительном мониторе курсор уходит в
Цитировать
15:19:07 X/Y  1919/900
т.е. координата X становится максимальной от первого монитора 1919, Y при этом сохраняется.

Кликер при нахождении на конкретном мониторе сравнивает координаты с максимальными именно этого монитора, даже если глобально они попадают не на него и в итоге ограничивает X первым монитором. Почему именно так, ну, такая ошибка.

Столкнулся, только когда окно NOX-а заняло слишком много места на экране и передвинул кликер на второй. И при этом рабочие координаты вышли за область второго монитора.
Понятно, что с этой ситуацией столкнуться только те, у кого на мониторах разное разрешение. Я вот столкнулся и мне пипец как неудобно.
« Последнее редактирование: Декабрь 29, 2020, 03:38:09 pm от Vint »


kiril

  • Освоившийся
  • **
  • Сообщений: 30
    • Просмотр профиля
Re: Баг с координатами при 2 мониторах
« Ответ #1 : Декабрь 29, 2020, 07:29:18 pm »
Еще сталкивался когда два монитора и более, то некоторые видеокарты, иногда на обычный
GETSCREEN, который десятки раз, на этом скрипте и этом компе работал штатно, Выдаёт полную черноту, как при неправильной привязке.
Лечение нашёл в добавлении проверки цвета пикселя который заведомо не может быть чёрным и если он чёрный, то  условие возвращает выполнение к GETSCREEN.
Проявляется такое, когда пользователь во весь экран гоняет игру с быстрым обсчётом изменяющейся графики, а на втором мониторе смотрит какое-то видео в сжатом формате или гоняет вторую копию этой игры.
Верный признак если графика игры подвисает и есть второй монитор, то подстраховываться от такого бага, а несколько мониторов встречается у людей всё чаще и чаще.

Алексей87

  • Освоившийся
  • **
  • Сообщений: 32
    • Просмотр профиля
Re: Баг с координатами при 2 мониторах
« Ответ #2 : Февраль 21, 2021, 09:59:44 pm »
Интересное и полезное замечание!
Я так понимаю на виртуализацию это не распространяется, и предполагается что отдельная ВМ = 1 монитору и это ни от чего не зависит. У меня просто три монитора и везде разное разрешение.