Author Topic: Функция IF_PIXEL_IN  (Read 1807 times)

0 Members and 1 Guest are viewing this topic.

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Функция IF_PIXEL_IN
« 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)

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Функция IF_PIXEL_IN
« Reply #1 on: May 28, 2019, 12:44:53 PM »
всеравно не работает

sovaxa

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: Функция IF_PIXEL_IN
« Reply #2 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)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Функция IF_PIXEL_IN
« Reply #3 on: May 28, 2019, 01:10:53 PM »
Потому что IF_PIXEL_IN не просто функция, а целая блочная конструкция с ELSE и окончанием.
Её нельзя вот так запросто вкладывать в IF или объединять логическими операторами. Она не возвращает результат в месте вызова и результат нашла/не нашла True/False у неё сделан "структурой" кода (ХЗ как назвать).
Короче все поняли.
Переделывай.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Функция IF_PIXEL_IN
« Reply #4 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)

Можно ещё придумать.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Функция IF_PIXEL_IN
« Reply #5 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

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