Почему на Mac «плывёт» прицел: macOS отдаёт мышь раз в кадр экрана
aonetimeusername 30 минут назад Почему на Mac «плывёт» прицел: macOS отдаёт мышь раз в кадр экрана Средний 3 мин 697 macOS * Игры и игровые консоли Разработка игр * Из песочницы Я играю в Counter-Strike 2 на MacBook Pro...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: aonetimeusername 30 минут назад Почему на Mac «плывёт» прицел: macOS отдаёт мышь раз в кадр экрана Средний 3 мин 697 macOS * Игры и игровые консоли Разработка игр * Из песочницы Я играю в Counter-Strike 2 на MacBook Pro 14 с M3 Pro. Кадров хватает, 100 с лишним в секунду, а прицел всё равно ощущается ватным: мелкие доводки то недолетают, то перелетают. Сначала я грешил на ускорение указателя, потом на лимит кадров, потом на саму игру.
Не помогало ничего, и в какой-то момент я просто записал, как события мыши доходят до приложения. ЗамерДве ленты с одного и того же движения мыши, снятые одновременно:системный тап (CGEventTap) с аппаратными метками времени, то есть то, что на самом деле шлёт мышь;поток NSEvent в окне обычного Cocoa-приложения, то есть то, что macOS отдаёт программе. Мышь Logitech через USB-приёмник с опросом 1000 Гц, экран 120 Гц (кадр 8,33 мс), macOS Tahoe.
Технические детали
Steam и остальное в фоне я не закрывал, условия обычные. Двадцать секунд непрерывного движения. мышь шлётприложение получаетсобытий за 20,1 с13 4522 269медиана интервала1,02 мс8,08 мсp90 / p992,19 / 7,77 мс9,90 / 17,06 мсинтервалов короче 2 мс82,6 %0,2 %интервалов 6–10 мс, около одного кадра1,0 %88,6 %Одни и те же 100 мс: сверху события от мыши, снизу события в приложении; ниже гистограммы интервалов за все 20 секундЗа одни и те же 100 мс мышь прислала 81 событие, а приложение получило 13.
Всё, что пришло за кадр экрана, система складывает в одно событие и отдаёт его раз в кадр. На форуме разработчиков Apple есть тред Changes in Mouse Event Reporting Frequency in macOS 26. 2, где прямо написано, что система прореживает события мыши до частоты экрана.
У движка sokol (чистый C, никаких прослоек) про то же самое issue #1344. Так что дело в системе, а не в конкретной игре. Почему на рабочем столе этого не видно, а в игре видноКурсор рабочего стола перерисовывается с той же частотой, с какой приходят пачки, поэтому пачка просто становится одним шагом курсора.
Отраслевые последствия
У игры свой темп кадров, и с темпом пачек он почти никогда не совпадает. Простая арифметика для 100 fps: кадр длится 10 мс, пачка приходит раз в 8,33 мс. За 50 мс проходит 5 кадров и 6 пачек, значит четыре кадра получают по одной пачке, а пятый две.
Если вести мышь ровно, на каждом пятом кадре прицел прыгает вдвое дальше, двадцать раз в секунду. На 80 fps кадры получают попеременно одну и две пачки. Это расчёт, а не замер, но ощущается ровно так.
Лимит кадров переставляет рывки с места на место, а убрать их не может. Что пробовалУскорение указателя стоит выключить в любом случае (Системные настройки → Мышь): с ним одно и то же движение руки поворачивает на разный угол. К пачкам оно отношения не имеет.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.






