Author Topic: Баг с координатами при 2 мониторах  (Read 3689 times)

0 Members and 1 Guest are viewing this topic.

Vint

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

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

Вот демонстрационный код
Code: (clickermann) [Select]
MOVE(1000, 900)
LOGWRITE("X/Y  ", $_xmouse, "/", $_ymouse)
HALT

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

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

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

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

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


kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: Баг с координатами при 2 мониторах
« Reply #1 on: December 29, 2020, 07:29:18 PM »
Еще сталкивался когда два монитора и более, то некоторые видеокарты, иногда на обычный
GETSCREEN, который десятки раз, на этом скрипте и этом компе работал штатно, Выдаёт полную черноту, как при неправильной привязке.
Лечение нашёл в добавлении проверки цвета пикселя который заведомо не может быть чёрным и если он чёрный, то  условие возвращает выполнение к GETSCREEN.
Проявляется такое, когда пользователь во весь экран гоняет игру с быстрым обсчётом изменяющейся графики, а на втором мониторе смотрит какое-то видео в сжатом формате или гоняет вторую копию этой игры.
Верный признак если графика игры подвисает и есть второй монитор, то подстраховываться от такого бага, а несколько мониторов встречается у людей всё чаще и чаще.

Алексей87

  • Освоившийся
  • **
  • Posts: 32
    • View Profile
Re: Баг с координатами при 2 мониторах
« Reply #2 on: February 21, 2021, 09:59:44 PM »
Интересное и полезное замечание!
Я так понимаю на виртуализацию это не распространяется, и предполагается что отдельная ВМ = 1 монитору и это ни от чего не зависит. У меня просто три монитора и везде разное разрешение.