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

 
Ответить в эту темуОткрыть новую тему
> Get color помогите разобраться
Druid_
сообщение 28.5.2014, 11:52
Сообщение #1


*

Registred
Сообщений: 4
Регистрация: 21.5.2014
Группа: Пользователи
Наличность: 0
Пользователь №: 16.842
Возраст: 30



Спасибо за разработку полезного ПО )
А вот задача: необходимо найти цвет отличный от чёрного на полоске шириной в 1 пиксель и длиной в почти 1920. Я написал такой скрипт:

set workwindow windowfromcursor
set #xf 1875

while #xf > 40
get color #color #xf 992// [abs]
set #xf #xf - 1

if #color != 0
log ------------------
log цвет: #color
log коорд: #xf 992
move #xf 992
goto end_patch
end_if
end_while

:end_patch
end_script


И всё вроде заработало после определённого шаманства с неопределением цвета. Но суть в том, что такой метод работает очень медленно. Эта полоска проверяется в окне игры секунд 20 наверное, а надо практически мгновенно. И, кроме того, при проверке почему-то постоянно мерцает экран.

Вроде есть команда, чтобы можно было сделать скриншот экрана, но можно ли из этого файла как-то получить массив с точками и цветами, чтобы работать с ним? или может я чего неправильно делаю?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.5.2014, 12:10
Сообщение #2


***********

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



Цитата
Вроде есть команда, чтобы можно было сделать скриншот экрана, но можно ли из этого файла как-то получить массив с точками и цветами, чтобы работать с ним?

нет, но кнайт(разработчик) активно пинается по этому поводу и уже давно.
Цитата
И, кроме того, при проверке почему-то постоянно мерцает экран.

такое бывает. к тому же вы тратите 2 развертки экрана обработку, показан будет только 1.
Цитата
или может я чего неправильно делаю?

формально все так, но вообще для этого есть специальный оператор findcolor. Он кстати с подобными параметрами отработает мгновенно почти.
http://uopilot.tati.pro/index.php?title=Findcolor


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


*

Registred
Сообщений: 4
Регистрация: 21.5.2014
Группа: Пользователи
Наличность: 0
Пользователь №: 16.842
Возраст: 30



Спасибо, попробовал Findcolor, но тут свои проблемы. Макрос получился такой:

set workwindow windowfromcursor
log workwindow

set #a FindColor (40 992 1875 992 1 1 (R(1-256)) %ColorArray workwindow)

set #ctr1 #a
while #ctr1 > 0
set #xr %ColorArray[#ctr1 1]
set #yr %ColorArray[#ctr1 2]// + #yf // почему-то вместо 992 записывает в массив 0. Если же я задаю искать с 992 по 993 пиксел, то, соответственно, записывает 0 вместо 992 и 1 вместо 993.
log Номер пикселя: #ctr1 (из #a)
log x: #xr y: #yr
set #ctr1 #ctr1 - 1
end_while

log workw: workwindow
log mov: #xr #yr
log a: #a
move #xr #yr [abs]
end_script

В большинстве случаев он не находит ни одной точки, а в переменную #a записывается 0. Видимо он считает, что перед ним чёрный экран. Однако, если воспользоваться клавишами Ctrl+A, то цвет определяется верно в точке, где находился курсор. Иногда он находит ряд точек, но они совершенно не верные (вероятно, в этом случае работает с каким-то другим окном). Странно, учитывая то, что get color определял цвет нормально (правда только после того, как я перевёл игрушку в оконный режим).

UPD: сейчас затестил скрипт на обычной win-программе (мало ли какие могут быть проблемы с игрой). Так вот проблемы те же: если я ставлю R(1-256) или R(1-256),G(1-256),B(1-256), то не находится ни одной точки. Если же я ставлю R(0-256),G(0-256),B(0-256) то он находит примерно треть точек от той области которую я указал(!), а должен находить все. Или я опять что-то не догоняю...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.5.2014, 16:13
Сообщение #4


***********

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



для начала 256 быть не может. только 255.
диапазон 0-256 содержит в себе 257 значений - это ошибка.


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


*

Registred
Сообщений: 4
Регистрация: 21.5.2014
Группа: Пользователи
Наличность: 0
Пользователь №: 16.842
Возраст: 30



Цитата(DarkMaster @ 28.5.2014, 17:13) *

для начала 256 быть не может. только 255.
диапазон 0-256 содержит в себе 257 значений - это ошибка.

да, это я проглючил конкретно. И это вроде как решило проблему для win-програмки. Теперь количество точек очень похоже на реальное. А вот с игрушкой пока та же проблема, не находит ничего.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.5.2014, 16:59
Сообщение #6


***********

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



метод workwindow мало где работает. используй метод "2"(без кавычек).

а что после поиска содержится в #a?


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


*

Registred
Сообщений: 4
Регистрация: 21.5.2014
Группа: Пользователи
Наличность: 0
Пользователь №: 16.842
Возраст: 30



Цитата(DarkMaster @ 28.5.2014, 17:59) *

метод workwindow мало где работает. используй метод "2"(без кавычек).

а что после поиска содержится в #a?

ё-маё... я пытался ставить 2 и 1 но ничего не работало. Но я следовал синтаксису:
set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColors) %ResultArray [type [count]] [abs])
соответственно использовал квадратные скобки, а примеры внизу не заметил, где этих скобок не было...

с 2-кой похоже заработало, чуть позжу уже досконально проверю.

если верить http://uopilot.tati.pro/index.php?title=Findcolor
то #a - количество найденных пикселей (я именно это и имел в виду)

Спасибо, ты меня выручил )
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.5.2014, 19:42
Сообщение #8


***********

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



(IMG:style_emoticons/default/smile.gif)


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

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

 

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