Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: sovaxa on May 28, 2019, 11:56:19 AM

Title: Функция IF_PIXEL_IN
Post by: sovaxa on May 28, 2019, 11:56:19 AM
Помогите разобраться, почему не работает?

GETSCREEN
IF( (IF_PIXEL_IN(0,698, 30,722, 3814898)) & (IF_PIXEL_IN(35,698, 65,722, 3683569)) & (IF_PIXEL_IN(65,698, 95,722, 3814898)) & (IF_PIXEL_IN(95,698, 130,722, 3683569)) & (IF_PIXEL_IN(130,698, 160,722, 3814898)) & (IF_PIXEL_IN(165,698, 195,722, 3683569)) & (IF_PIXEL_IN(195,698, 225,722, 3814898)) & (IF_PIXEL_IN(225,698, 260,722, 3683569)) & (IF_PIXEL_IN(260,698, 290,722, 3814898)) & (IF_PIXEL_IN(295,698, 325,722, 3683569)) )
   
   WAITMS(1000)
   BEEP(200,1000)
   
END_IF
WAITMS(2000)
Title: Re: Функция IF_PIXEL_IN
Post by: sovaxa on May 28, 2019, 12:44:53 PM
всеравно не работает
Title: Re: Функция IF_PIXEL_IN
Post by: sovaxa on May 28, 2019, 01:07:48 PM
GETSCREEN
IF( (IF_PIXEL_IN(0,698, 30,722, 3814898)) & (IF_PIXEL_IN(35,698, 65,722, 3683569)) & (IF_PIXEL_IN(65,698, 95,722, 3814898)) & (IF_PIXEL_IN(95,698, 130,722, 3683569)) & (IF_PIXEL_IN(130,698, 160,722, 3814898)) & (IF_PIXEL_IN(165,698, 195,722, 3683569)) & (IF_PIXEL_IN(195,698, 225,722, 3814898)) & (IF_PIXEL_IN(225,698, 260,722, 3683569)) & (IF_PIXEL_IN(260,698, 290,722, 3814898)) & (IF_PIXEL_IN(295,698, 325,722, 3683569)) )
   
   WAITMS(1000)
   BEEP(200,1000)

END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF   
END_IF
WAITMS(2000)
Title: Re: Функция IF_PIXEL_IN
Post by: Vint on May 28, 2019, 01:10:53 PM
Потому что IF_PIXEL_IN не просто функция, а целая блочная конструкция с ELSE и окончанием.
Её нельзя вот так запросто вкладывать в IF или объединять логическими операторами. Она не возвращает результат в месте вызова и результат нашла/не нашла True/False у неё сделан "структурой" кода (ХЗ как назвать).
Короче все поняли.
Переделывай.
Title: Re: Функция IF_PIXEL_IN
Post by: Vint on May 28, 2019, 01:25:45 PM
Вот так по прямому, как показал kiril, самое разумное. Если не нужно много редактировать и поисков разумное количество.

Ещё один вариант
Code: (clickermann) [Select]
SUB(IPI, $x1, $y1, $x2, $y2, $color)
    IF($find = 1)
        IF_PIXEL_IN($x1,$y1, $x2,$y2, $color)
        ELSE
            $find = 0
        END_IF
    END_IF
END_SUB

$find = 1
GETSCREEN
IPI(0,698, 30,722, 3814898)
IPI(35,698, 65,722, 3683569)
IPI(65,698, 95,722, 3814898)
IPI(95,698, 130,722, 3683569)
IPI(130,698, 160,722, 3814898)
IPI(165,698, 195,722, 3683569)
IPI(195,698, 225,722, 3814898)
IPI(225,698, 260,722, 3683569)
IPI(260,698, 290,722, 3814898)
IPI(295,698, 325,722, 3683569)

IF($find = 1)
    WAITMS(1000)
    BEEP(200,1000)
END_IF
WAITMS(2000)

Можно ещё придумать.
Title: Re: Функция IF_PIXEL_IN
Post by: Vint on May 28, 2019, 01:35:32 PM
Только что-то ты перемудрил. Всё, что у тебя написано заменяется всего двумя поисками
Code: (clickermann) [Select]
GETSCREEN(260,698, 290,722)
IF_PIXEL_IN(260,698, 290,722, 3814898)
    IF_PIXEL_IN(295,698, 325,722, 3683569)
        WAITMS(1000)
        BEEP(200,1000)
    END_IF
END_IF

Что ты хотел сделать непонятно. Ведь области НЕ независимые они вложенные и каждая последующая внутри преведущей.
Не будет последней, не выполнится итоговое условие. А промежуточные варианты ни на что не влияют, только лишняя нагрузка на пустом месте.