1

Тема: AHK: Медленно нажиматься клавиши при PixelGetColor

Здравствуйте. Стал в последнее время замечать что нажатия скрипта стали медленнее с PixelGetColor. А точнее когда сам скрипт немного вырос в длине, добавил больше значений кнопок, то стала идти задержка. Бывает что скрипт срабатывает моментально и нажимает быстро кнопки, а бывает происходит задержка в виде что пиксель уже появился а скрип еще думает где то порядка 2-4мс. Проверял руками нажимать кнопки когда появляется пиксель, при нажатии на клавиши все работает быстро без задержек, но скрипт 50/50 бывает быстро жмет а бывает что то подтупливает. Сам скрипт ниже. Был бы очень признателен, за помощь в оптимизации. Есть так сказать чувство что из за множества пикселей и обрабатывания скрипт подтупливает.

vk45::
Loop
{
GetKeyState, state, vk45
if state = U
break

CoordMode, Pixel, Window
PixelGetColor, color, 622, 670, RGB ; Удар бури
If (color = 0x566272)
{
Send, {1}
sleep 10
}

CoordMode, Pixel, Window
PixelGetColor, color, 625, 665, RGB ; Удар Ветра
If (color = 0xD8FAFF)
{
Send, {1}
sleep 10
}

PixelGetColor, color, 623, 659, RGB ; Огненный шок
If (color = 0xE0741D)
{
Send, {2}
sleep 10
}

PixelGetColor, color, 626, 667, RGB ; Вскипание лавы
If (color = 0xFED237)
{
Send, {3}
sleep 10
}

PixelGetColor, color, 628, 667, RGB ; Ледяной шок
If (color = 0x006FB9)
{
Send, {4}
sleep 10
}

PixelGetColor, color, 626, 670, RGB ; Выброс лавы
If (color = 0xD53617)
{
Send, {5}
sleep 10
}

PixelGetColor, color, 624, 666, RGB ; Сокрушающая молния
If (color = 0x085ED9)
{
Send, {6}
sleep 10
}

PixelGetColor, color, 628, 664, RGB ; Ветра рока
If (color = 0x7D83AE)
{
Send, ^{1}
sleep 10
}

PixelGetColor, color, 623, 665, RGB ; Дух дикого зверя
If (color = 0x00223E)
{
Send, +{q}
sleep 10
}

PixelGetColor, color, 625, 664, RGB ; Тотем Неистовства ветра
If (color = 0xECE4FB)
{
Send, +{2}
sleep 10
}

PixelGetColor, color, 627, 668, RGB ; Светозарный луч
If (color = 0xFFFF67)
{
Send, +{r}
sleep 10
}

PixelGetColor, color, 624, 663, RGB ; Молния
If (color = 0x1259BE)
{
Send, {g}
sleep 10
}

PixelGetColor, color, 626, 674, RGB ; Цепная молния
If (color = 0x0B4A9A)
{
Send, {f}
sleep 10
}

PixelGetColor, color, 627, 669, RGB ; Кольцо огня
If (color = 0xFFFE45)
{
Send, {h}
sleep 10
}

PixelGetColor, color, 623, 666, RGB ; Ледяной клинок
If (color = 0x5CD5F8)
{
Send, {t}
sleep 10
}

PixelGetColor, color, 631, 672, RGB ; удар духов стихий
If (color = 0x7757B1)
{
Send, {5}
sleep 10
}

PixelGetColor, color, 626, 668, RGB ; Раскол
If (color = 0xA03000)
{
Send, {y}
sleep 10
}

PixelGetColor, color, 624, 668, RGB ; Первозданная волна
If (color = 0x213536)
{
Send, {q}
sleep 10
}

PixelGetColor, color, 625, 662, RGB ; 664
If (color = 0xA1E8F3)
{
Send, {=}
sleep 10
}

PixelGetColor, color, 625, 665, RGB ; чарка на правую
If (color = 0x777A8E)
{
Send, {-}
sleep 10
}

PixelGetColor, color, 627, 664, RGB ; чарка на левую
If (color = 0xFE9B19)
{
Send, {0}
sleep 10
}

PixelGetColor, color, 624, 674, RGB ; Диспел
If (color = 0x8D77EB)
{
Send, {f2}
sleep 10
}

PixelGetColor, color, 624, 669, RGB ; Проекция тотема
If (color = 0xC77F43)
{
Send, {x}
sleep 10
}

}
Return

End::
  ExitApp
Return

2

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

Команды для ускорения:

SetKeyDelay, -1, -1
SetMouseDelay, -1
SetBatchLines, -1
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

Это кардинально не поможет, тут надо GDIP использовать.
Это вы в WOW с плагина пиксели читаете?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

FRATER1234 пишет:

а бывает происходит задержка в виде что пиксель уже появился а скрип еще думает где то порядка 2-4мс

2-4мс как вы это заметили? Или 2-4сек всё таки.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

serzh82saratov Да это WoW используется аддон ротация, в котором все картинки заменены на простые спрайты с простой заливкой цвета. Данный скрипт работает, но есть как выше описал проблемы с считыванием. Я проверял просто жать руками так же быстро и игра быстрее считывала нажатия клавиши чем скрипта.

6

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

FRATER1234 пишет:

просто жать руками

Что это значит?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

serzh82saratovЭто я имел виду за клавиатуру. Нажатие клавиш на клавиатуре лучше реагируют на нажатие. Чем это делает скрипт мой.

8

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

Так нажатие как выглядит, там один PixelGetColor?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9 (изменено: FRATER1234, 2023-03-19 20:30:05)

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

serzh82saratov Вот приложил скрин. Иконки которая просто залита сплошным однотонным цветом. который ищет PixelGetColor. И они меняются в зависимость от следующего заклинания. Там появляется разные цвета.

Post's attachments

1.png
1.png 204 b, 2 downloads since 2023-03-19 

You don't have the permssions to download the attachments of this post.

10

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

FRATER1234 пишет:

Я проверял просто жать руками так же быстро и игра быстрее считывала нажатия клавиши

Код приведите этого нажатия, похоже вы не понимаете о чём вас спрашивают.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11 (изменено: FRATER1234, 2023-03-19 20:42:17)

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

serzh82saratovВы скорей всего не поняли меня. Жать руками клавиши, это не код. Это просто нажатие моими пальцами на клавиатуре 1 2 3 4 Q SHIFT+1 и т.д. я просто смотрел на экран в ротацию, где мне показывало что нажимать за клавишу на клавиатуре я ее и нажимал, без использования выше скрипта. Вот так я и проверял отклик самой игры к аддону ротации в игре без выше скрипта. Вот наглядный пример как это выглядит в самой игре. И то что мой скрипт считывает чтоб вам было более понятливее https://imgur.com/a/vCVKUrc

12

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

FRATER1234 пишет:

Да это WoW используется аддон ротация, в котором все картинки заменены на простые спрайты с простой заливкой цвета

FRATER1234 пишет:

И то что мой скрипт считывает чтоб вам было более понятливее

Ещё больше запутали, скрипт со спрайта цвет берёт или с анимаций?

serzh82saratov пишет:

2-4мс как вы это заметили? Или 2-4сек всё таки

Так какие задержки?

FRATER1234 пишет:

просто нажатие моими пальцами на клавиатуре 1 2 3 4 Q SHIFT+1 и т.д.

Вернулись в начало темы, слишком много PixelGetColor, с ними ничего не придумаешь, ответ я вам дал в самом начале.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

serzh82saratovТогда сразу встречный вопрос где можно почитать про GDIP в AHK ? Спасибо заранее.

14

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

На форумах, здесь или на оффициальном ищите, конкретной ссылки под рукой у меня сейчас нет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Медленно нажиматься клавиши при PixelGetColor

Используйте функцию PixelSearch вместо PixelGetColor, если вам не нужно точно знать цвет пикселя. PixelSearch ищет пиксель заданного цвета в заданной области, и это может существенно сократить количество вызовов функции PixelGetColor и ускорить выполнение вашего скрипта.

Если ваш скрипт работает с большим количеством пикселей, то можете сократить количество обрабатываемых пикселей, уменьшив размер области, в которой вы ищете пиксель. Если пиксели находятся рядом друг с другом, вы можете использовать функцию PixelSearch для поиска первого пикселя и затем искать остальные пиксели вокруг него.

Если ваш скрипт работает с большим количеством кнопок, то можете сократить количество вызовов функции MouseClick, используя функцию ControlClick, которая имитирует щелчок мыши на указанной кнопке в указанном окне. Это может существенно сократить количество вызовов функции MouseClick и ускорить выполнение вашего скрипта.

Избегайте использования циклов в вашем скрипте, если это возможно. Циклы могут замедлить выполнение скрипта, особенно если вы используете много итераций.

Оптимизируйте ваше окружение. Закройте все ненужные программы и процессы, чтобы освободить ресурсы и улучшить производительность вашего скрипта.

Используйте профилирование для определения проблемных участков вашего кода. Вы можете использовать инструменты профилирования, такие как XDebug или Blackfire, чтобы определить, какие части вашего кода занимают больше всего времени.

Надеюсь, эти советы помогут вам оптимизировать ваш скрипт и улучшить его производительность. Если у вас есть какие-либо дополнительные вопросы, не стесняйтесь задавать их.

Только учусь.