|
Поиск картинки в игре на MEmu |
|
|
PostByMik |
25.10.2020, 17:09
|
 
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40

|
Пытаюсь понять логику работы команды findimage, пока попытки успехом не увенчались. Знающие люди, подскажите, пожалуйста, как работает, какова логика работы данной команды: 1. Можно ли сделать скрин области в игре на эмуляторе MEmu (естественно в формате .bmp 24 бита) и далее её искать в указанной области или это так не работает? 2. если первый пункт не верный, то как надо? А теперь сама задача, которую я пытаюсь решить. Есть игра, в игре есть карта, на карте с определенным промежутком времени появляется караван, на который надо кликнуть и провести еще пару манипуляций мышью. Пытаюсь пока написать код, что бы он находил караван и кликал на него (после нажатия на него откроется меню ну и дальше уже обычные клики и ожидания, этому, вроде, я научился.) Код --lua local startX, startY, endX, endY = 0, 0, 830, 465 -- координаты поиска local path = [["C:\Caravan.bmp"]] -- путь к картинке, bmp 24 бита local arr, a = findimage (startX, startY, endX, endY, {path}, 2, 70, 1, 25) -- поиск картинки hint (a) -- результат поиска, подсказка в правом нижнем углу if arr then -- если найдена log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2]) kleft (arr[1][1], arr[1][2]) -- кликнули end
 Это скрин карты в игре с караваном на ней, пытался на нем потренироваться, не находит (
Caravan.bmp ( 18,36 килобайт )
Кол-во скачиваний: 192 Это скрин самого каравана, который надо найти. Что я делаю не так, подскажите, пожалуйста.
|
|
|
|
|
  |
Ответов
DarkMaster |
9.11.2020, 23:42
|
          
Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Цитата O(N) на одинаковом типе данных никогда не будет быстрее O(log N). Пример тому бинарный и линейный поиск. Опечатался. O(1) конечно же, а не O(N). Цитата Да и вообще, оценка стоимости операций сравнения - корень всех бед. Можно неплохо испортить код, если начать считать тики инструкций машины. Имхо это больше применимо к более серьзным компиляторам, чем луашный. Я так же отчасти согласен, что не стоит убиваться по тактам. У нас не асм и не мертвые АТшки. Но и делать откровенные глупости, тоже не надо. Использовать списки под хранение больших массивов данных должно быть чем-то оправдано, а оправдать это бывает очень сложно. Так же есть прямая рекомендация разрабов не использовать списки там, где это не нужно. Понятие "нужно", естественно, определяет каждый сам. Цитата Это мгновенный поиск. Смотря, что делать. Может стать и существенным накладным расходом. В частности на этапе вкручивания луа я пытался понять производительность некоторых операций по работе со строками(а там есть проблемки) и получал очень странные результаты. Точнее их было по сути дела два. Один раз запускаешь и отрабатывает за время t1, а второй раз запускаешь и получается время t2. Причем оба значения в рамках теста существенно отличались друг от друга, но погрешность t1 и t2 была минимальна. Для понимания: 2.4, 3.7, 2.42, 3.69, 3.72, 2.41 и т.д. Т.е. было 2 группы чисел. Сначала все было списано на тонкости работы jit, ибо jit действительно иногда дает подобный эффект и предсказать его не очень реально. Много позже я снова тыкал этот тест из любопытства и понял, что время выполнения зависит от порядка элементов в списке (он не регламентирован и может плавать). Да это была синтетика, но эффект по сути убил тест и самое печальное, что на тот момент отсутствовало понимание происходящего. Сообщение отредактировал DarkMaster - 9.11.2020, 23:44
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
10.11.2020, 14:48
|
       
Master
Сообщений: 1.403
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22547
Пользователь №: 16.156

|
Цитата(DarkMaster @ 9.11.2020, 23:42) 
Смотря, что делать. Может стать и существенным накладным расходом.
Ну опять же, решаем мы задачу на луа, полагаясь на то, что основной функционал будет спрятан внутри библиотек на си. обработка изображений там, просчет матриц. для удобства и переходим на уровень выше. а не нем разброс отклика до 50мс даже серьезно не воспринимается. Ну вот опять же, что на ум первое пришло - питон. Так там вообще черепашья скорость выполнения самого языка. А сколько поклонников ? И мало кого смущает факт того что там числа складываются на несколько порядков дольше "обычного". Типичный проект на питоне - кучка dll на си + обертка для них. И работает шикарно. Ну а кому не нравится то, что там пустая функция выполняется 150-200мс - переписывают все это дело на плюсах. Это я собственно к чему все. Если скрипт в 95% своей нагрузки вызывает findimage, findcolor и подобные вещи (а как правило в этом и смысл связки пилот + lua), то использование индексов или ключей погоды не сделают. При всем этом, на форуме был пост с имплементацией findimage на луа. Это круто. Но можно ли его считать идиоматичным, учитывая что там изобилие конструкций си ? Как по мне это странно, когда на скриптах делаются системные (в нашем случае) вещи.
|
|
|
|
Сообщений в этой теме
PostByMik Поиск картинки в игре на MEmu 25.10.2020, 17:09 cirus
Для чего? getimage или printscreen.
Часто изображ... 25.10.2020, 17:37 PostByMik Я во всем этом новичек, пытаюсь понять сам, но пре... 25.10.2020, 19:28 PostByMik Дайте, пожалуйста, адекватный пример. Со всеми тре... 25.10.2020, 20:11 cirus getimage неправильно работает при работе с экраном... 25.10.2020, 20:17 PostByMik
Так нашел и сохранил сразу. Спасибо огромное... 25.10.2020, 20:32 cirus RE: Поиск картинки в игре на MEmu 25.10.2020, 20:41 PostByMik
Искренне благодарен, с этим файлом работает, но ... 25.10.2020, 20:54 cirus
Открыть искомую картинку в Paint, выбрать каранда... 25.10.2020, 21:08 PostByMik Спасибо за ответ!
Я понимаю, что Вам с высоты ... 25.10.2020, 21:14 Fors1k
Осталось понять про пиксель. Зачем его красить? И... 26.10.2020, 0:05 cirus
--lua
local ffi = require("ffi"... 25.10.2020, 21:51 PostByMik Спасибо огромное за пояснения!
Код буду перев... 25.10.2020, 21:52 PostByMik Подскажите, пожалуйста, как решить проблему.
l... 26.10.2020, 19:28 DarkMaster Я бы рекомендовал:
1) вырезать правый нижний угол ... 26.10.2020, 19:44 cirus Можно удалить из массива лишние картинки.
--lua
fu... 27.10.2020, 4:00 PostByMik
Ох! Спасибо!
А можно пояснить что тут к ч... 27.10.2020, 8:20 cirus Кстати, искать картинки можно и такого вида:
Левы... 27.10.2020, 11:20 dimas01 На эту же тему вопрос. Надеюсь автор темы не проти... 27.10.2020, 13:23 cirus
Создавайте отдельную.
Нужен пилот версии 2.41, а... 27.10.2020, 13:29 PostByMik Всем спасибо за помощь!
В итоге, для меня лег... 27.10.2020, 17:47 PostByMik Может кто знает как заставить данный код нажимать ... 2.11.2020, 21:30 DarkMaster kleft (arr[1][1] + 10, arr... 2.11.2020, 21:54 cirus
kleft (arr[1][1] + math.floor... 3.11.2020, 1:37 DarkMaster тогда уж:
kleft (math.floor((arr[1... 3.11.2020, 2:21 PostByMik Ох! Спасибо огромное!
Еще хотел пару вопр... 3.11.2020, 9:09 cirus
Например какие?
Не можно, а нужно.
--lua
log ... 3.11.2020, 11:02 PostByMik Простите, но я не очень понял как именно это испол... 3.11.2020, 14:49 DarkMaster Есть у меня комбайн под подобные задачи. Работа ра... 3.11.2020, 17:18 Cockney
Есть у меня комбайн под подобные задачи. Работа р... 4.11.2020, 13:44 PostByMik Апд.
Как я понял, при помощи function можно созда... 3.11.2020, 20:07 PostByMik Апд.
Проверил, работает! ) 3.11.2020, 20:30 DarkMaster
Завтра утром ты не вспомнишь, что это за набор ма... 3.11.2020, 20:52 PostByMik
Да понятное дело, что твой код крутой, но я же до... 3.11.2020, 21:21 PostByMik
вот где почитать про все эти функции, ну кроме кл... 3.11.2020, 21:31 DarkMaster
это не функции. Это имена параметров функции. Ну ... 3.11.2020, 21:50 PostByMik
Да, написал выше, что не углядел сразу)
Спасибо... 3.11.2020, 21:59 PostByMik
Так и не смог понять как у Вас реализован функцио... 4.11.2020, 11:21 DarkMaster
Были еще до этого комбайна - работает. Тут правда... 4.11.2020, 17:52 DarkMaster
В конкретно этом случае - никак. Это просто заглу... 4.11.2020, 20:42 cirus
А что мешает проверить изменения в области №2? 4.11.2020, 20:55 DarkMaster
Необходимость произвести 2 клика прежде чем будет... 4.11.2020, 21:32 PostByMik
Действительно, есть)
Если отойти от вашего комба... 5.11.2020, 11:21 DarkMaster что-то вроде этого. внутри тела цикла клики соотве... 5.11.2020, 18:33 PostByMik
Пытаюсь понять всё описанное в Вашем комбайне.
В... 8.11.2020, 15:45 DarkMaster
В нормальном виде это каждый раз новая функция по... 8.11.2020, 20:02 PostByMik Ни где не смог найти информацию, казалось бы, кото... 9.11.2020, 15:38 Fors1k
что означают фигурные скобки после знака "=... 9.11.2020, 16:45 PostByMik Ох! Спасибо Огромное!
Теперь стало понятно... 9.11.2020, 17:07 PostByMik Всё в туже тему, про работу по таймеру.
Написал к... 9.11.2020, 18:27 DarkMaster
Так делать не стоит - малейший лаг и проскочит.
... 9.11.2020, 20:19 DarkMaster
Да простят меня за дотошность, но в рамках луа эт... 9.11.2020, 20:35 Cockney
Доступ к элементу в связном списке в среднем зани... 9.11.2020, 21:34 PostByMik А если у меня вместо
портянка на 100+ строк, то м... 9.11.2020, 22:20 PostByMik Суть в в следующем.
У меня есть (назовем их частям... 9.11.2020, 22:31 DarkMaster
Тыщ на 100 элементов создай список и сравни с мас... 9.11.2020, 22:48 Cockney
Тыщ на 100 элементов создай список и сравни с мас... 9.11.2020, 23:10 PostByMik
Если не учитывать, что я написал, что нужно после... 10.11.2020, 13:13 PostByMik
Или раз в неделю ручками менять данные. Но хотело... 10.11.2020, 14:16 cirus
Os.date 10.11.2020, 14:27 DarkMaster
Вставка на си. Едва ли это так плохо. В том же си... 10.11.2020, 15:43 Cockney
Вставка на си. Едва ли это так плохо.
Точно ? ... 10.11.2020, 17:11 DarkMaster
Беспонятия =) Сообщил для информации.
Тут есть и... 10.11.2020, 17:16 Cockney
Тут есть и оборотная сторона. Пишем не на луа - д... 10.11.2020, 17:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|