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

 
Ответить в эту темуОткрыть новую тему
> Две проверки цвета на один кадр.
deNoor
сообщение 28.9.2018, 4:35
Сообщение #1


**

Neophyte
Сообщений: 10
Регистрация: 24.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.019
Возраст: 28



Из-за опасений привязываться к окну игры (соглашение пользователя уверяет, система защиты ищет всё, что держит идентификатор клиента игры. Кто знает, что они имеют в виду) и желания использовать sendex хотел бы определять активно ли окно игры (для предотвращения кликов в другие окна, если клиент не в фокусе) по цветам пикселей в двух разных точках. (Игра позволяет поставить там свои цвета).
Ожидаемые цвета в этих точках будут значить, что сейчас на экране клиент игры.

Однако доводилось читать где-то на этом форуме, что color может сделать лишь одну проверку за кадр. То есть для проверки двух точек нужны два кадра, а это вдвое медленней (IMG:style_emoticons/default/sad.gif)
Как проверить два пикселя одного кадра? Для меня лучше меньше циклов проверки, но точная уверенность, что обе проверки прошли для одного и того же кадра. ФПСики в игре могут сильно упасть, поиск двух пикселей в одном кадре наверняка же быстрее, чем подождать два кадра.

findcolor смог бы?

Как будто, есть GetImage. В нём можно поискать?

(?) Есть ли какая-то польза от замены:
color 0 0 16273
на
findcolor (0 0 0 0 1 1 (16273) %pix 2 1 abs) — надеюсь, именно так делается правильная проверка цвета в одной точке.
например, findcolor быстрее в сравнении с color.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.9.2018, 5:27
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
color может сделать лишь одну проверку за кадр

Нет, но учитывая, что color проверят лишь одну точку, то неизбежно будет использовано два забора цвета. А вот if, while работающие по старомой схеме будут каждый раз ждрать новой развертки и вертикальной синхронизации.
Цитата
color 0 0 16273
на
findcolor (0 0 0 0 1 1 (16273) %pix 2 1 abs)

Вроде бы color это частный случай findcolor.
Цитата
Как будто, есть GetImage. В нём можно поискать?

Он вам и нужен.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deNoor
сообщение 28.9.2018, 7:29
Сообщение #3


**

Neophyte
Сообщений: 10
Регистрация: 24.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.019
Возраст: 28



Если color может проверить две точки за кадр, то разве if и while помешают? Или то про if и while, которые со специальными условиями для цвета в секции "Цвет и изображения"?

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

get color #checkwindow 1 0 abs
get color #action 0 0 abs

if #checkwindow = 16273 //развёрнуто ли окно с постоянным цветом
  switch #action
  // список реакций на переменный цвет
  end_switch
end_if

Если get color не ждёт принудительно нового кадра, могу ли считать, что такое ничуть не хуже, чем привыкать к GetImage?
Останется ли ничуть не хуже, если проверочных пикселей станет сразу два (и общее число проверяемых станет три) для гарантий нужного окна?

Цитата
Он вам и нужен.

Если придётся использовать GetImage, то в примерах пишут про специальный тип поиска для findimage в сохранённом изображении %a [1 1] (адрес в памяти). Ожидать, что это сработает для findcolor? Про него не пишут такое в примерах.
Не похоже, чтобы get color умел поискать в GetImage, ему не передать место для поиска.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.9.2018, 16:47
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Или то про if и while, которые со специальными условиями для цвета в секции "Цвет и изображения"?

именно
Цитата
Если get color не ждёт принудительно нового кадра, могу ли считать, что такое ничуть не хуже, чем привыкать к GetImage?

Насчет get color не уверен. Есть предельно похожая функция color()
Формально - хуже ибо изображение будет сниматься дважы, на практике вряд ли вы поймете разницу. Просадки фпс вы не заметите. Лично видел как в линейке color() снимал 400 раз в секунду цвет и не влиял на фпс.
Так же бывают случаи когда необходимо определить изображение в пределах одного кадра. Например мы бежим и меняются координаты:
18
19
20
Может получиться ситуация, что в момент снятия числа "19" мы снимем "1", после чего координата изменится и мы снимем "0".
В итоге будет ошибка снятия координат:
18
19
10
Цитата
Если придётся использовать GetImage, то в примерах пишут про специальный тип поиска для findimage в сохранённом изображении %a [1 1] (адрес в памяти). Ожидать, что это сработает для findcolor? Про него не пишут такое в примерах.

Точно можно использовать findimage. Для этого потребуется создать картинку как минимум из ДВУХ точек. Цвет левой верхней точки считается фоном и игнорируется при поиске.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deNoor
сообщение 29.9.2018, 0:51
Сообщение #5


**

Neophyte
Сообщений: 10
Регистрация: 24.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.019
Возраст: 28



Cпасибки) Я остановился на запоминании указанного color для двух точек. У меня проверочный постоянный и нужно лишь знать, тут он или нет перед действием. Даже в случае маловероятной ошибки никакого беспокойства.

При отключённом Aero никаких проблем с несколькими заборами цвета нет.
При включенном жуткая жуть творится с торможением кадров, требуется порядка 100 мс между заборами одного цвета, чтобы было комфортно играть. Aero включил только для теста и повторять не буду :Р
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

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