Author Topic: Странное поведение при определении цвета  (Read 4256 times)

0 Members and 4 Guests are viewing this topic.

Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Добрый день, простой код:
Code: [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   If (PXL(267, 36) ! 10751)   
      SCREENSHOTEX(100, 35, 280, 45, "Мой скриншот_", 1)
$check = 1
         WAITMS(50)
    ELSE
         WAITMS(50)
   END_IF
END_CYC

по сути чекается полоска хп. Когда хп падает до определенного уровня - делаю скрин всей полоски.
Проблема в том что я ставлю контрольную точку в начале (вместо x=267 - х=150) или в конце - скрин делается примерно на одном и том же уровне хп. Не могу понять где проблема :(

Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Quote
Возможно, что разница в 117 пикселей в вашем случае и есть  - примерно один уровень ХП.

SCREENSHOTEX(100, 35, 280, 45, "Мой скриншот_", 1)
здесь как раз вся полоска хп - 100->280
я условно ставил проверку пикселя в интервале 150...267 и срабатывание все равно в одном и том же месте

Quote
Наиболее вероятно, что цвет всегда не равен 10751 - в результате вы всегда сразу получаете скрин текущего состояния полоски, независимо от контрольной точки.

я это предполагал.
запускаю скрипт, иду тестить на мобах. Хп постепенно проседает и скрин чекается ВСЕГДА в одном и том же месте. То есть как-то работает все-таки.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну, так у тебя же скрин есть, на нём и проверь цвет в проверяемой точке. Только не примерно, а именно под PXL, потом смотри соседние цвета.

И покажи хоть пару скринов своей полоски.


Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
чтобы поставить условие PXL я навожу курсор на точку полоски в игре и записываю x,y,clr.
скрин только вечером смогу (

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Мало ли случаев. Привязка, масштаб win не 100%. При этом можно брать координаты не в том месте.


Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
полоска хп примерно такая
https://yadi.sk/i/sxD9WlvGgAmepw

Quote
Привязка, масштаб win не 100%. При этом можно брать координаты не в том месте.

записанные координаты в SCREENSHOTEX совпадают с фактическими.
Масштаб нормальный

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Контролировать уровень полоски лучше всего с помощью подсчета пикселов определенного цвета

$count = PXLCOUNT(10,10, 100,100, 255)
LOGWRITE ($count) // смотрим в логе количество пикселов
IF($count < 100)
  // действие если уровень ниже заданного
END_IF


Чтобы выронить цвет полоски применяем цветокоррекцию 7 уровень

GETSCREEN
COLORMODE(7)


Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Контролировать уровень полоски лучше всего с помощью подсчета пикселов определенного цвета

$count = PXLCOUNT(10,10, 100,100, 255)
LOGWRITE ($count) // смотрим в логе количество пикселов
IF($count < 100)
  // действие если уровень ниже заданного
END_IF


Чтобы выронить цвет полоски применяем цветокоррекцию 7 уровень

GETSCREEN
COLORMODE(7)

попробую, спасибо

Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
скриншот в формате .jpg ничего не даёт, а вот пара несжатых скриншотов в разных состояниях полоски, сильно поможет пониманию возникших у вас проблем.

в том и дело что независимо от условия - скрин полоски примерно одинаков, залил бмп
https://yadi.sk/i/t7t-T0wTI93Ibg
https://yadi.sk/i/HPwcDU-EKyiygA
« Last Edit: May 21, 2019, 09:20:19 PM by Roland »

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Высота цифр статичная в 7 пикселей, сама строка вроде бы тоже на одном месте, а вот на счёт разделителя я не уверен, но он один и всегда по центру. Так что можешь анализировать полосу здоровья высотой 1 пиксель и на всю ширину индикатора здоровья. Можно еще воспользоваться распознаванием чисел, выбирай сам
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
хорошо видно, что ваши изображения уже были предварительно сжаты, повторная перекодировка ничего в данном случае не меняет.
Если скачать, bmp-шки не сжатые, всё нормально.

Вот только цвета 10751 на них НЕТ!


Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Вот только цвета 10751 на них НЕТ!

смотрел цвет в кликере курсором.
если такого цвета нет - то скрин должен сработать сразу же. Правильно? Но такого не происходит.

Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
в-общем PXLCOUNT работает, все спасибо
но почему PXL не пошел - непонятно )

------------------------

спрошу тут - а как зажать клавишу на несколько секунд?
Code: [Select]
keyDown(#Q)
waitms(4000)
  keyUp(#Q)

не пашет
« Last Edit: May 22, 2019, 11:32:47 PM by Roland »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ты так и не сказал используешь привязку или нет.
Зажатия не работают в привязке.
Если это какой нибудь эмулятор андроида, то и другие проблемы могут лезть от туда.

Но указанного тобой цвета на скринах нет, можешь сам проверить. Вот скрин твоего цвета 10751..., видно что он яркий, видимо полоска подсвечивается при наведении курсора, неужели это нельзя заметить? В этом случае цвета нужно брать со скрина.

+Цвета на полоске не постоянные. Смотри скрин где я свёл слоями твои два скрина. Вот область выделенная муравьями не имеет отличий.
Как раз на второй полосе пикселей отличия довольно обширные, есть и в других местах. Составляющая красного цвета там отличается на 1 единицу. Естественно, точный поиск это определит.
Цвет может "плыть" и при изменении значения на полоске, такое часто бывает.

Используй цветокоррекцию 7 уровня и всё как рукой снимет.
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
    GETSCREEN(100, 35, 280, 45)
    COLORMODE(7, 100, 35, 280, 45)
    IF(PXL(267, 36) ! 8355839)
        SCREENSHOTEX(100, 35, 280, 45, "Мой скриншот_", 1)
        $check = 1
    END_IF
    WAITMS(50)
END_CYC


Roland

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Ты так и не сказал используешь привязку или нет.
Зажатия не работают в привязке.
Если это какой нибудь эмулятор андроида, то и другие проблемы могут лезть от туда.

нет, привязки не использую пока. Это десктопная игра. Но в ней есть возможность оконного режима с разрешением полного экрана (1920*1080). Может в этом причина что зажатие не работает?

про цвета: может это особенности рендера такие... я взяли другие координаты (36 строку и 446 цвет) и по ней PXL не отрабатывает, а PXLCOUNT вполне точно работает. Про COLORMODE я понял на будущее.

еще вопрос: после GETSCREEN я сколько угодно раз могу обращаться к этому снимку для обработки разных участков?
GETSCREEN по координатам работает существенно быстрее полного?
« Last Edit: May 23, 2019, 11:01:42 AM by Roland »