Здравствуйте, гость ( Вход | Регистрация )

> Поиск картинки в игре на MEmu
PostByMik
сообщение 25.10.2020, 17:09
Сообщение #1


**

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
Это скрин самого каравана, который надо найти.

Что я делаю не так, подскажите, пожалуйста.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 9.11.2020, 23:42
Сообщение #2


***********

Модератор 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____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 10.11.2020, 14:48
Сообщение #3


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22547
Пользователь №: 16.156



Цитата(DarkMaster @ 9.11.2020, 23:42) *


Смотря, что делать. Может стать и существенным накладным расходом.




Ну опять же, решаем мы задачу на луа, полагаясь на то, что основной функционал будет спрятан внутри библиотек на си. обработка изображений там, просчет матриц. для удобства и переходим на уровень выше. а не нем разброс отклика до 50мс даже серьезно не воспринимается. Ну вот опять же, что на ум первое пришло - питон. Так там вообще черепашья скорость выполнения самого языка. А сколько поклонников ? И мало кого смущает факт того что там числа складываются на несколько порядков дольше "обычного". Типичный проект на питоне - кучка dll на си + обертка для них. И работает шикарно. Ну а кому не нравится то, что там пустая функция выполняется 150-200мс - переписывают все это дело на плюсах.


Это я собственно к чему все. Если скрипт в 95% своей нагрузки вызывает findimage, findcolor и подобные вещи (а как правило в этом и смысл связки пилот + lua), то использование индексов или ключей погоды не сделают.

При всем этом, на форуме был пост с имплементацией findimage на луа. Это круто. Но можно ли его считать идиоматичным, учитывая что там изобилие конструкций си ? Как по мне это странно, когда на скриптах делаются системные (в нашем случае) вещи.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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

 

- Текстовая версия | Версия для КПК Сейчас: 7.7.2025, 19:49
Designed by Nickostyle