Автор Тема: Прошу консультации по организации собственных функций  (Прочитано 989 раз)

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

Оффлайн Centhron [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Всем привет.
 Решил изучать AutoIt для автоматизации рутинных действий по работе, но для начала решил потренироваться на играх.
Для начала захотел попробовать написать простого бота для игры, который в определенных моментах просто проходит по координатам и кликает на них либо один, либо 2 раза левой кнопкой мыши, а в других случаях пробует найти участок изображения и на основании того найдено оно или нет либо выдает ошибку, либо продолжает скрипт, а в некоторых случаях использует возвращаемые координаты найденного рисунка и подставляет их для клика мышью. Решил для этого воспользоваться функцией BmpSearch, т.к. с помощью нее по примеру у меня получилось сразу передвинуть мышь в тестовом скрипте, а с помощью ImageSearch.au3 не вышло и не смог её победить. Пиксельсерч не подходит из-за неудобства использования в конкретной задаче.
 Я решил сразу подойти к задаче, по моему мнению, с правильной стороны и адекватно организовывать функции используемые многократно и потом лишь вызывать их с нужными параметрами, а не плодить одинаковый код.
Вот мой код на котором я пытаюсь разобраться с пользовательскими функциями:

Код: AutoIt [Выделить]
#include <ScreenCapture.au3>
#include <BmpSearch.au3>
#include <AutoItConstants.au3>


WinActivate("Название окна")

_MovCl (956, 977,1)
_MovCl (940, 700,2)

_Fbmp("\1.bmp")
   If @error Then MsgBox(0,"Error","Error Image not found")
   Else MouseMove($aCoords[1][2], $aCoords[1][3], 10)
   EndIf



Func _MovCl($ix=0,$iy=0,$cl=1)
   If $cl=1 Then MouseClick("left",$ix, $iy,1,5)
   If $cl=2 Then MouseClick("left",$ix, $iy,2,5)
   Sleep(2000)
EndFunc

Func _Fbmp ($bmp=0)
   _GDIPlus_Startup()

   If $bmp=0 Then @error

   $hBitmap = _ScreenCapture_Capture()
   $hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
   $hSource = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

   $hBmp = _GDIPlus_BitmapCreateFromFile(@ScriptDir & $bmp)
   $hFind = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)

   $aCoords = _BmpSearch($hSource, $hFind, 1)
   Return $aCoords

EndFunc
 


  Функция _MovCl отлично работает, вызываю её и передаю в виде параметров координаты и количество необходимых мне нажатий и функция грамотно отрабатывает. А вот обернуть функцию bmpsearch в свою функцию _Fbmp у меня не получается никак, я хотел бы в эту функцию передавать только ссылку на необходимый мне bmp файл и далее чтобы она возвращала координаты, либо ошибку, далее я бы уже с помощью условия If Then Else прописал бы, что в случае ошибки остановить скрипт, а если ошибки нет и изображение найдено, то либо продолжить скрипт, ибо условие выполнено, либо взять координаты изображения и подставить в функцию управления мышью. Но у меня постоянно выходят ошибки либо в массиве координат, либо в выражении If Else. Я до этого где-то прочитал, что внутри пользовательстких функций нельзя вызывать другие функции, может быть проблема в этом заключается, подскажите друзья как можно решить этот вопрос и можно ли подойти к решению данной задачи выбранным мной способом или возможно есть более адекватное решение, до которого я пока не смог дойти сам.
 И еще один вопрос, если все же мое решение имеет место быть, есть ли способ назначить переменной значение координаты из массива, в данном примере можно ли сделать что-то подобное $x = $aCoords[1][2] , чтобы назначить переменной х значение координаты х найденного рисунка из массива?
Заранее спасибо за помощь всем кто отзовется  :IL_AutoIt_1:

Русское сообщество AutoIt


Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 792
  • Репутация: 139
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
где-то прочитал, что внутри пользовательстких функций нельзя вызывать другие функции
Нет , это не так , внутри функций Вы можете вызывать любые другие функции

Оффлайн SharkyEXE [?]

  • Новичок
  • *
  • Сообщений: 56
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Всем здравствуйте.

Есть 10 одинаковых блоков , в которых меняются только три параметра - выделены жирным

(нажмите для показа/скрытия)

Хочется функции , типа чтобы было так

(нажмите для показа/скрытия)

Но у меня не работает.

Помогите мне , пожалуйста
Скорблю и помню.


Оффлайн ra4o [?]

  • Скриптер
  • ****
  • Сообщений: 792
  • Репутация: 139
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Желательно весь кусок кода, который нужно оптимизировать предоставьте.

Русское сообщество AutoIt

Re: Прошу консультации по организации собственных функций
« Ответ #3 Отправлен: Декабрь 21, 2017, 15:41:42 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
6 Ответов
4284 Просмотров
Последний ответ Апрель 06, 2010, 21:25:35
от Pavel.1979
26 Ответов
13006 Просмотров
Последний ответ Март 19, 2014, 04:32:36
от Yashied
4 Ответов
3510 Просмотров
Последний ответ Январь 25, 2013, 13:49:52
от inververs
8 Ответов
3409 Просмотров
Последний ответ Август 12, 2013, 18:57:39
от Zalman1980
4 Ответов
1777 Просмотров
Последний ответ Март 14, 2014, 14:41:30
от Pero
5 Ответов
1438 Просмотров
Последний ответ Февраль 25, 2015, 16:20:00
от gloss
1 Ответов
901 Просмотров
Последний ответ Октябрь 15, 2015, 19:58:56
от Medic84
0 Ответов
392 Просмотров
Последний ответ Октябрь 15, 2015, 14:21:44
от Yashied
7 Ответов
1176 Просмотров
Последний ответ Октябрь 15, 2015, 17:08:38
от NuclearBeer
10 Ответов
1421 Просмотров
Последний ответ Апрель 28, 2017, 13:59:47
от ra4o