grayswandir
Новичок
- Сообщения
- 7
- Репутация
- 0
И снова доброго времени суток! Вдогонку к теме " http://autoit-script.ru/index.php?topic=18658.0 ".
Ситуация следующая: есть бот, разработанный под свои нужды и работающий только в активном окне.
Цель: запускать несколько клиентов игры+бота, поиск наименее затратного по ресурсам компьютера способа.
Отчасти удалось решить проблему, через удаленный доступ, однако, такой способ дал повышение потребляемых ресурсов процессора, примерно в полтора раза.
Отсюда вопрос: возможно-ли оптимизировать следующие функции(приложу ниже) для работы в неактивном окне, и если да, то в каком направлении копать?
Функция Getpos() считывает содержание 2х пикселей, которые посылаются аддоном игры, в них содержаться: координаты, азимут и прочее.
Соответственно функция движения
И функция поворота
Акцент на двух вещах: 1) считывание цветов пикселей по заданным координатам. 2) движения мыши с зажатой правой кнопкой.
1)Проведя поиск по форуму, нашел способ считывания через отснятый скриншот, и его анализа, однако там же, указывается, что это весьма ресурсоемкий процесс, из чего следует 2 вопроса, можно-ли делать скриншоты только определенной (21 пиксель в ширину, и возможно, получится урезать высоту) части окна, и насколько это повысит производительность такого способа?
2) На счет движений мыши в неактивном окне, с зажатой кнопкой, информации практически не нашел.
Ситуация следующая: есть бот, разработанный под свои нужды и работающий только в активном окне.
Цель: запускать несколько клиентов игры+бота, поиск наименее затратного по ресурсам компьютера способа.
Отчасти удалось решить проблему, через удаленный доступ, однако, такой способ дал повышение потребляемых ресурсов процессора, примерно в полтора раза.
Отсюда вопрос: возможно-ли оптимизировать следующие функции(приложу ниже) для работы в неактивном окне, и если да, то в каком направлении копать?
Функция Getpos() считывает содержание 2х пикселей, которые посылаются аддоном игры, в них содержаться: координаты, азимут и прочее.
Код:
Func GetPos()
StartMoving()
$pixel1 = _ColorGetRGB(PixelGetColor(0, 0, $hwnd));
$pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd));
local $result[3] = [ ($pixel1[0]+$pixel1[1]/255.0)/255*100, ($pixel2[0]+$pixel2[1]/255.0)/255*100, $pixel1[2]*7.0/255 ]
return $result
EndFunc
Соответственно функция движения
Код:
Func Move($want)
while true
StartMoving()
local $pos = GetPos()
local $dir = GetDirection($pos[0], $pos[1], $want[0], $want[1], $pos[2])
;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f, %.2f): (%.2f,%.2f)", $pos[0], $pos[1], $pos[2], $want[0], $want[1], $want[2], $dir[0], $dir[1]))
if abs($dir[0]) < 0.1 And abs($dir[1]) < 0.1 then ExitLoop
if abs($dir[0]) >= abs($dir[1]) Then
Send("{a up}{d up}")
if $dir[0] <=0 Then
Send("{w down}{s up}") ; forward
Else
Send("{s down}{w up}") ; backward
EndIf
Else
Send("{s up}")
if $dir[1] < 0 Then
Send("{d down}{a up}") ; right
Else
Send("{a down}{d up}") ; left
EndIf
EndIf
wend
Send("{s up}{a up}{d up}")
EndFunc
И функция поворота
Код:
Func Turn($want)
while true
$current = GetPos()
$sin = sin($current[2] - $want[2])
;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f,%.2f)", $current[0], $current[1], $sin, $want[0], $want[1], $want[2]))
if abs($sin) < 0.05 then return
MouseMove(MouseGetPos(0)+50*$sin, MouseGetPos(1), 1)
wend
EndFunc
Акцент на двух вещах: 1) считывание цветов пикселей по заданным координатам. 2) движения мыши с зажатой правой кнопкой.
1)Проведя поиск по форуму, нашел способ считывания через отснятый скриншот, и его анализа, однако там же, указывается, что это весьма ресурсоемкий процесс, из чего следует 2 вопроса, можно-ли делать скриншоты только определенной (21 пиксель в ширину, и возможно, получится урезать высоту) части окна, и насколько это повысит производительность такого способа?
2) На счет движений мыши в неактивном окне, с зажатой кнопкой, информации практически не нашел.