Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started 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)
-
всеравно не работает
-
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)
-
Потому что IF_PIXEL_IN не просто функция, а целая блочная конструкция с ELSE и окончанием.
Её нельзя вот так запросто вкладывать в IF или объединять логическими операторами. Она не возвращает результат в месте вызова и результат нашла/не нашла True/False у неё сделан "структурой" кода (ХЗ как назвать).
Короче все поняли.
Переделывай.
-
Вот так по прямому, как показал kiril, самое разумное. Если не нужно много редактировать и поисков разумное количество.
Ещё один вариант
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)
Можно ещё придумать.
-
Только что-то ты перемудрил. Всё, что у тебя написано заменяется всего двумя поисками
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
Что ты хотел сделать непонятно. Ведь области НЕ независимые они вложенные и каждая последующая внутри преведущей.
Не будет последней, не выполнится итоговое условие. А промежуточные варианты ни на что не влияют, только лишняя нагрузка на пустом месте.