Author Topic: как реализовать цикл?  (Read 5207 times)

0 Members and 1 Guest are viewing this topic.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
как реализовать цикл?
« on: June 14, 2017, 11:47:47 AM »
Как реализовать цыкл? Нужно удерживать зажатой клавишу до появления пикселя.
Что то ти по этого, но это не работает.
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (246,544, 248,546)
   COLORMODE (246,544, 248,546)
   IF_PIXEL_IN(247,545, 4194175)
      $check = 1
      KEYPRESS(#c)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_CYC
// Продолжить скрипт
« Last Edit: June 15, 2017, 12:08:17 PM by Vint »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: как реализовать цыкл?
« Reply #1 on: June 14, 2017, 11:54:08 AM »
Ошибка в седьмой строке. Должно быть или:
Code: (clickermann) [Select]
IF_PIXEL_IN(246,544, 248,546, 4194175)или:
Code: (clickermann) [Select]
IF(PXL(247,545)=4194175)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: как реализовать цыкл?
« Reply #2 on: June 14, 2017, 12:41:08 PM »
И вместо
Code: (clickermann) [Select]
KEYPRESS(#c)должно быть отжатие
Code: (clickermann) [Select]
KEYUP(#C)


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: как реализовать цыкл?
« Reply #3 on: June 14, 2017, 02:01:14 PM »
А где уровень цветокоррекции??
Code: (clickermann) [Select]
COLORMODE (246,544, 248,546)

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: как реализовать цыкл?
« Reply #4 on: June 14, 2017, 07:43:30 PM »
Как реализовать цыкл?
В слове "цыкл" ошибка. Правильно будет- ЦИКЛ.  :) ;) :D ;D

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цыкл?
« Reply #5 on: June 14, 2017, 08:54:01 PM »
Не в обиду ребят, но мы вить не на уроке русского языка :) да и я спрашивал как удержать клавишу нажатой до тех пор пока пиксель не найдется.
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 6-ой строки
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(241,544, 243,546, 3851877)
      $check = 1
      KEYUP(#c)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_CYC
// Продолжить скрипт
« Last Edit: June 14, 2017, 09:22:39 PM by Ramzesia »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: как реализовать цыкл?
« Reply #6 on: June 14, 2017, 09:18:30 PM »
Вот так верно, только укажи уровень цветокоррекции
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
WAITMS(50)

$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (247,545, 247,545)
   COLORMODE (?,247,545, 247,545)
   IF(PXL(247,545) = 4194175)
      KEYUP(#C)
      WAITMS(100)
      $check = 1
   ELSE
      WAITMS(10)
   END_IF
END_CYC
// Продолжить скрипт

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цыкл?
« Reply #7 on: June 14, 2017, 09:32:37 PM »
Не работает. Около секунды клавиша зажата, как заходит в цикл сразу отжимается.  :'(

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: как реализовать цыкл?
« Reply #8 on: June 14, 2017, 09:35:38 PM »
Не работает. Около секунды клавиша зажата, как заходит в цикл сразу отжимается.  :'(
Да что-ж там у тебя с этими зажатиями? Может так?...
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
WAITMS(50)
 
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (247,545, 247,545)
   COLORMODE (6,247,545, 247,545)
   IF(PXL(247,545) = 4194175)
      KEYUP(#C)
      WAITMS(100)
      $check = 1
   ELSE
      WAITMS(10)
      KEYDOWN(#C)
   END_IF
END_CYC
// Продолжить скрипт

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цыкл?
« Reply #9 on: June 14, 2017, 09:46:15 PM »
Не работает. Около секунды клавиша зажата, как заходит в цикл сразу отжимается.  :'(
Да что-ж там у тебя с этими зажатиями? Может так?...
Code: (clickermann) [Select]
//Скрипт
KEYDOWN(#C)
WAITMS(50)
 
$check = 0 // Тут клавиша отжимается, а нужно что бы была зажата до появления пикселя 7-ой строки
WHILE($check = 0)
   GETSCREEN (247,545, 247,545)
   COLORMODE (6,247,545, 247,545)
   IF(PXL(247,545) = 4194175)
      KEYUP(#C)
      WAITMS(100)
      $check = 1
   ELSE
      WAITMS(10)
      KEYDOWN(#C)
   END_IF
END_CYC
// Продолжить скрипт
А вот так РАБОТАЕТ  :) :-* Походу я так пробовал но из за ошибки с иф пиксель не сработало. Спасибо всем огромное, пойду допиливать нюансы ) это я так понимаю он около 80 нажатий клавиши "С" сейчас будет делать?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: как реализовать цыкл?
« Reply #10 on: June 15, 2017, 12:37:15 PM »
А вот так РАБОТАЕТ ...это я так понимаю он около 80 нажатий клавиши "С" сейчас будет делать?
Вот теперь стало понятно что именно у тебя не работало. Точнее всё работало, но ты думал что должно быть всё по другому.

Сейчас сделали многократное зажатие кнопки без отпускания KEYDOWN(#C). Но приложение может реагировать правильно и предварительно отпускать.

Твоя ошибка в том, что "зажать" клавишу это не то что ты думаешь. Это именно зажать (как бег в игре, например). При зажатии никакого автоповтора нет. Если ты ожидал как в редакторе при зажатии пишет "ccccccccccccccccc". Автоповтор - это возможности драйвера физической клавиатуры и им он реализован. Поэтому если нужно не зажатие, а многократное нажатие (или автоповтор), ты должен позаботиться об этом сам прописав в цикле.


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цыкл?
« Reply #11 on: June 19, 2017, 04:54:49 PM »
А вот так РАБОТАЕТ ...это я так понимаю он около 80 нажатий клавиши "С" сейчас будет делать?
Вот теперь стало понятно что именно у тебя не работало. Точнее всё работало, но ты думал что должно быть всё по другому.
Я понял тебя но не могу никак понять как зациклить, вот часть скрипта помоги правильно поставить "Зажатие С, Х"
Code: (clickermann) [Select]
for($var2=0, $var2 < 3)
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х
   WAITMS(1500)
END_CYC

$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF

Вот так? Или можно, как то попроще сделать?
Code: (clickermann) [Select]
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х
WAITMS(100)

$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
      KEYDOWN(#C) // зажата кнопка с
      KEYDOWN(#X) // зажата кнопка х
   END_IF
END_CYC
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF
« Last Edit: June 19, 2017, 05:23:07 PM by Ramzesia »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: как реализовать цикл?
« Reply #12 on: June 19, 2017, 06:44:15 PM »
Многократное написание KEYDOWN приводит к многократному нажатию этой клавиши.

Code: (clickermann) [Select]
WAITMS(50)
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х

WAITMS(50)
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х

WAITMS(50)
KEYDOWN(#C) // зажата кнопка с
KEYDOWN(#X) // зажата кнопка х

Твой скрипт в цикле будет постоянно нажимать CX

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: как реализовать цикл?
« Reply #13 on: June 19, 2017, 07:17:05 PM »
Мне нужно что бы эти две клавиши были зажаты до тех пор пока не появится окно.

В этом случае окно висит лишнее время пока не пройдет цикл с клавишами
Code: (clickermann) [Select]
for($var2=0, $var2 < 3)
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х
   WAITMS(1500)
END_CYC
 //Дальше не срабатывает сразу ждет цикл выше а окно иногда появляется раньше и висит лишние 2+/- сек
$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time2 ! 0) // если картинка Okno.bmp не была найдена
   KEYUP(#c) // отпустить кнопку с
   KEYUP(#x) // отпустить кнопку х
END_IF

Если сделать просто нажатие, то клавиши отпускаются после начала цикла поиска окна.

Code: (clickermann) [Select]
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х

$time2 = $_time_t + 10 // После этого клавиши отпускаются а картинки еще нет и рыба уходит
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90) // До этого окна нужно удерживать клавиши С, Х. А после его появления отпустить
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(50)
   END_IF
END_CYC

А мне нужно следующее...
Code: (clickermann) [Select]
//Нажать клавиши и удерживать их
   KEYDOWN(#C) // зажата кнопка с
   KEYDOWN(#X) // зажата кнопка х
//Найти картинку и только потом отпустить их
 IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90)
//Отпустить клавиши
//Сделать действие если нашли
LCLICK($_return1+315, $_return2+63)

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: как реализовать цикл?
« Reply #14 on: June 19, 2017, 07:30:11 PM »
ЧЁ опять не устраивает? Не пойму...
В начале вообще не надо делать зажатия.
Пиши их в блоке ELSE.
Code: (clickermann) [Select]
$time2 = $_time_t + 10
WHILE($time2 > $_time_t)
   GETSCREEN(2,36, 961,575)
   COLORMODE(6, 2,36, 961,575)
   IF_PICTURE_IN (2,36, 961,575, "texture\Okno.bmp", 52275, 90)
      $time2 = 0
      KEYUP(#c) // отпустить кнопку с
      KEYUP(#x) // отпустить кнопку х
      WAITMS(100)
      LCLICK($_return1+315, $_return2+63)
      WAITMS(RND(170,210))
   ELSE
      WAITMS(100)
      KEYDOWN(#C) // зажата кнопка с
      KEYDOWN(#X) // зажата кнопка х
   END_IF
END_CYC