Author Topic: IF_PICTURE_IN поиск нескольких картинок помогите  (Read 6807 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile

Используешь одинаковые переменные в разных потоках!
$i - переменная цикла.


loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
вот это я балбес спасибо  ::)

все заработало ура
« Last Edit: January 26, 2017, 05:30:09 PM by loki »

Vint

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


loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
хотя вот так наверное правда лучше
Code: [Select]

DEFINE($d1,0)
DEFINE($d2,0)
DEFINE($d3,0)
DEFINE($d4,0)
DEFINE($d5,0)
DEFINE($d6,0)
DEFINE($d7,0)

DEFINE($u1,0)
DEFINE($u2,0)
DEFINE($u3,0)
DEFINE($u4,0)
DEFINE($u5,0)
DEFINE($u6,0)
DEFINE($u7,0)

THREAD(down, 1)
   GETSCREEN
   COLORMODE(5)
   FOR($d=1,$d<8)
      IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$d,".bmp"), 16777215, $toch)
         LCLICK(1169,318)
         LOGWRITE ("âíèç ",$d)
         SETVAR(STRCONCAT("$d",$d), 1)
         WAITMS(50)
         SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$d,"_"), 0)
         WAIT(90)
      else
         FOR($u=1,$u<8)
            IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$u,".bmp"), 16777215, $toch)
               LCLICK(1174,267)
               LOGWRITE ("ââåðõ ",$u)
               SETVAR(STRCONCAT("$u",$u), 1)
               WAITMS(50)
               SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$u,"_"), 0)
               WAIT(90)
            END_IF
         END_CYC
      END_IF
   END_CYC
   WAITMS(100)
end_thread

значительно быстрее спасибо
« Last Edit: January 26, 2017, 05:50:13 PM by loki »

loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
следующий вопрос: когда добавляю для анализа еще картинки, все встает колом, впоть до зависания кликера, как еще оптимизировать процесс? чтоб искать например 100 картинок

Vint

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

Сейчас на каждую $d ищет все 8 $u.
И получается  7 * 8 = 56 поисков. 56! ищется впустую. т.к. картинка не менялась.


следующий вопрос: когда добавляю для анализа еще картинки, все встает колом, впоть до зависания кликера, как еще оптимизировать процесс? чтоб искать например 100 картинок
Наверно ты их тоже так добавляешь. Поиск у тебя растёт в геометрической прогрессии. Бесполезный поиск.
« Last Edit: January 26, 2017, 07:05:01 PM by Vint »


loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
и получаеться первое мое сообщение в которой я последовательно на каждую картинку писал чо делать :-[ или есть какие варианты еще
« Last Edit: January 26, 2017, 08:10:55 PM by loki »

Vint

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

Code: (clickermann) [Select]
IF($first = 0)
    $first = 1
    FOR($i=1, $i < 8)
        SETVAR(STRCONCAT("$d",$i), 0)
        SETVAR(STRCONCAT("$u",$i), 0)
    END_CYC
END_IF

GETSCREEN
COLORMODE(5)
FOR($d=1, $d < 8)
    IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$d,".bmp"), 16777215, $toch)
        LCLICK(1169,318)
        LOGWRITE ("вниз ",$d)
        SETVAR(STRCONCAT("$d",$d), 1)
        WAITMS(50)
        SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$d,"_"), 0)
        WAIT(90)
        GETSCREEN
        COLORMODE(5)
        $d = 1
    END_IF
END_CYC
WAITMS(30)
FOR($u=1, $u < 8)
    IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$u,".bmp"), 16777215, $toch)
        LCLICK(1174,267)
        LOGWRITE ("вверх ",$u)
        SETVAR(STRCONCAT("$u",$u), 1)
        WAITMS(50)
        SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$u,"_"), 0)
        WAIT(90)
        GETSCREEN
        COLORMODE(5)
        $u = 100
    END_IF
END_CYC
WAITMS(30)

Но по прежнему непонятно где обновляются переменные $d.. и $u..

Ты объясни, а то всех запутал.
На экране могут быть одновременно несколько разных картинок, например $u3 и $d5 ? Тебе нужно поймать "состояние" всех есть/нет. Или достаточно любой одной? Или достаточно одной из каждой серии d, u?

Могут ли одновременно находится на экране несколько одинаковых? Например две или три $u3 ? Нужно тогда определять координаты всех или достаточно одной.
« Last Edit: January 27, 2017, 09:09:05 AM by Vint »


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Действительно нужен выход из цикла если найдено чтоб начать его заново.
Кроме того за место многочисленных $d1 нужно использовать массив. Тогда не сложно и 1000 картинок сделать.
Сначала создаем два массива (если у тебя есть еще лево право то 4) заполняем их нулями. Потом где то считываем нужный нам индекс
LOGWRITE ($arr_d[2]) // например узнаем найдена ли вторая картинка
 

Code: (clickermann) [Select]
//== Инициализация =====================================

// создаем 2 массива и заполняем их нулями

$count_image = 7  // количество картинок
FOR($a=0,$a<$count_image+1)
   $arr_d[$a] = 0
END_CYC

FOR($a=0,$a<$count_image+1)
   $arr_u[$a] = 0
END_CYC

SETTHREAD (down, 1) // запускаем потоки


START: // далее зацикленный скрипт

THREAD(down, 0)
   GETSCREEN
   COLORMODE(5)
   FOR($d=1,$d<ARRSIZE($arr_d))
      IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$d,".bmp"), 16777215, $toch)
         LCLICK(1169,318)
         LOGWRITE ("вниз ",$d)
         $arr_d[$d] = 1
         WAITMS(50)
         SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$d,"_"), 0)
         WAIT(90)
         $d=ARRSIZE($arr_d) // выход из цикла
      ELSE
         IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$d,".bmp"), 16777215, $toch)
            LCLICK(1174,267)
            LOGWRITE ("вверх ",$d)
            $arr_u[$d] = 1
            WAITMS(50)
            SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$d,"_"), 0)
            WAIT(90)
            $d=ARRSIZE($arr_d) // выход из цикла
         END_IF
      END_IF
   END_CYC
   WAITMS(100)
END_THREAD




Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Когда я говорил про массив в сообщении #3. Я и имел ввиду массив состояний или флагов, вместо кучи переменных.
А не поиск в массив.


loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
на экране могут быть все сразу картинки и надо все сразу найти и нажать на одну из 2-х областей (группа картинок 1) либо на другую область ( группа картинок 2). каждый раз когда находит картинку относящаюся к группе 1 или к группе 2 давит на область экрана подходящую соответствующей группе картинок

щас попробую 23 ответ спасибо за участие очень приятно
« Last Edit: January 27, 2017, 05:30:33 PM by loki »

Vint

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

щас попробую 23 ответ спасибо за участие очень приятно

Зачем тогда переменные для каждого?
Тогда и ищи группами последовательно.


loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
нужно знать какая картинка сработала

вроде работает последний вариант сообщение 23 спасибо
« Last Edit: January 27, 2017, 06:58:56 PM by loki »

loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
эм запаздывает анализ поздно кликает

у меня идея: а если брать контрольную сумму картинки и ее сравнивать с контрольной суммой области анализа если сходиться то уже сравнивать картинку так будет быстрее?

loki

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
запаздывание идет на минуту это очень много