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

Основной раздел => Ошибки => Архив => Topic started by: Юрий on January 22, 2013, 09:03:52 AM

Title: Не правильное присвоение значения переменной $_return1
Post by: Юрий on January 22, 2013, 09:03:52 AM
День добрый уважаемые товарищи и не товарищи.
В устройстве программ не знаю даже азов.
Познакомился с вашим творением Clickermann 4,7 недели две назад.
Просто балдею от этой программы сижу в ней все свои выходные это прикольно тремя инструментами строишь пиромиду хеопса, из констрктора лего собираешь ферари.
Программа классная.
 
Code: (clickermann) [Select]
$obl_x1 = 417
 $y3 = 539
 $obl_x2 = 546
 $obl_y2 = 654
  GETSCREEN
COLORMODE(1, $obl_x1,$y3, $obl_x2, $obl_y2)
IF_PIXEL_IN ($obl_x1,$y3, $obl_x2,$obl_y2, 16777215)
               print( "X=", $_return1, ", Y3=", $_return2)
 // Подсчёт количества писилей под коодинатами
               $x1 = $_return1-116
               $y1 = $_return2-56
               $x2 = $_return1+31
               $y2 = $_return2+46
   LOGWRITE (" Исходная " ,$_return1)
  $Pixcily = PXLCOUNT ($x1, $y1, $x2, $y2, 16777215)
               LOGWRITE ("Количество пиксилей " ,$Pixcily)
 //координаты подсчёта др цвета------------------------------------------
( Координате $_return1 - присваиваеться значение - $Pixcily , $_return2 - не изменяется,
как бы переменные не менял и $count  ставил всяко разно - присваивает и всё.  В др. скриптах  я это по другому обходил, то есть $X = $_return1 +56 , ниже где мне надо было восполизавться этой переменной писал $B = $X - 56, Этот скрипт рабочий только убрать этот коментарий .Соорентирован произвольно для наглядности, поиск белого цвета. Ниже скрипт как я решил эту проблемму , искал причину не правильных данных часа три. Уже второй раз с этим столкнулся всё как с нуля. )
            $xzolty = $_return1 - 125     
            $yzolty = $_return2 - 44
            $xzolty2 = $_return1 + 61
            $yzolty2 = $_return2 + 72
 LOGWRITE (" После присвоения, изменёная. -" , $_return1)
END_IF
HALT


Code: (clickermann) [Select]
$obl_x1 = 417
 $y3 = 539
 $obl_x2 = 546
 $obl_y2 = 654
  GETSCREEN
 COLORMODE(1, $obl_x1,$y3, $obl_x2, $obl_y2)
 IF_PIXEL_IN ($obl_x1,$y3, $obl_x2,$obl_y2, 16777215)
              print( "X=", $_return1, ", Y3=", $_return2)
 // Подсчёт количества писилей под коодинатами
              $x1 = $_return1-116
              $y1 = $_return2-56
              $x2 = $_return1+31
              $y2 = $_return2+46

              $xzolty = $_return1 - 125     
              $yzolty = $_return2 - 44
              $xzolty2 = $_return1 + 61
              $yzolty2 = $_return2 + 72
LOGWRITE (" Исходная " ,$_return1)
  $Pixcily = PXLCOUNT ($x1, $y1, $x2, $y2, 167772 15)
              LOGWRITE ("Количество пиксилей " ,$Pixcily)
 //координаты подсчёта др цвета------------------------------------------
              LOGWRITE (" После присвоения, изменёная. -" , $_return1)
  END_IF
HALT

Большая благодарность автору.
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Vint on January 22, 2013, 11:20:05 AM
А кто такие "не товарищи".
Сразу вспомнилось: "Товарищи! Среди нас есть такие товарищи, которые нам совсем не товарищи"  кц.

На самом деле я, например, не знаю что должно получится после  COLORMODE(1) в котором 2097152 цветов при поиске цвета 16777215, что он там себе найдёт. Это только Джони может сказать. Может уходят отдельные составляющие в отрицательный диапазон. Но только зачем с этим разбираться? Применяй сознательно и всё будет нормально.

По поводу "Координате $_return1 - присваиваеться значение - $Pixcily"
Так это наоборот, $Pixcily присвоилось значение $_return1. PXLCOUNT возвращает результат в $_return1, а то, что ты сразу присвоил переменной $Pixcily результат пикселкоунта, ну так это ты сам так сделал.

Я просто всегда учитываю что $_return1, $_return2 не долгоживущие переменные и если их значение нужно долго, сразу присваиваю их другим переменным, что бы не держать в голове будут ли ещё IF_PIXEL_IN, IF_PICTURE_IN, PXLCOUNT и др. подобные  до того момента как они тебе последний раз понадобятся.
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Vint on January 31, 2013, 08:56:08 AM
Я сделал одну ошибку. Хоть после COLORMODE и другое количество цветов, номер у существующего цвета остаётся тот же самый.
По теме. Вчера мне потрепала нервы переменная $_return1. Кто бы мог подумать.
В скрипте уже был поиск IF_PICTURE_IN, так что $_return1 не нулевая.
Далее во вложенных циклах шёл IF_PICTURE_IN со смещаемыми координатами. Т.к. я уже воткнул
$x1=$_return1+$smeshenie между циклами, мне для правильного первого входа в цикл нужно было задать правильное $_return1.

Code: (clickermann) [Select]
$_return1=$b
$perebor=1
WHILE($perebor>0)
   GETSCREEN
   $x1=$_return1+$smeshenie
   FOR ($i,$i<11)
      IF_PICTURE_IN ($x1,$y1,$x1+INT($sdvig*1.3),$y2, "ляляля.bmp")
         // обработка...
         IF($i=11)
            $perebor=0
         END_IF
         $i=11              // выходим из цикла
      END_IF
   END_CYC
END_CYC

Тут поджидала засада. Оказывается этого делать нельзя! Нельзя присваивать значение $_return1. После этого она "застывает". И после ни IF_PICTURE_IN ни IF_PIXEL_IN (возможно все использующие, не проверял) не может присвоить значение переменной $_return1.
Можете сами проверить:

Code: (clickermann) [Select]
$_return1=100
LOGWRITE("Начальные return1  ",$_return1,"    return2  ",$_return2)
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
  GETSCREEN
  LOGWRITE("Найден в координатах X=", $_return1, ", Y=", $_return2)
END_IF
HALT

Всегда будет заданная вами $_return1 в не зависимости кто, что и где нашёл и пытается вернуть.
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Vint on January 31, 2013, 10:44:33 AM

GETSCREEN обрезался в процессе вставке на форум :) . Исправил. Но всё сказанное верно.
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Oraven on January 31, 2013, 01:34:04 PM

GETSCREEN обрезался в процессе вставке на форум :) . Исправил. Но всё сказанное верно.

Да действительно!! Причем это даже в 4.3 версии есть
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 03, 2013, 10:43:32 AM
 
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта

не только сохраняются, они еще и не обнуляются принудительно, не обнуляются при нулевом результате поиска картинки, гемор полный, единственный выход который я нашел - создал картинку в один пиксель и запускаю ее поиск, только так можно результаты $_return поменять.
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Oraven on July 03, 2013, 10:01:55 PM
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта

не только сохраняются, они еще и не обнуляются принудительно, не обнуляются при нулевом результате поиска картинки, гемор полный, единственный выход который я нашел - создал картинку в один пиксель и запускаю ее поиск, только так можно результаты $_return поменять.

Как объяснил разработчик, системные переменные это не обычные переменные и записывать в них категорически нельзя! Иначе будет создана уже несистемная переменная с таким же именем которая потом не будет меняться!
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 04, 2013, 11:40:12 AM
 
Как объяснил разработчик, системные переменные это не обычные переменные и записывать в них категорически нельзя! Иначе будет создана уже несистемная переменная с таким же именем которая потом не будет меняться!

она не обнуляется! хоть не трогай, хоть ты затрахай ее изменениями. в этом вся проблема. она меняется только когда идет запись в нее какого-либо найденного значения
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Oraven on July 04, 2013, 05:01:32 PM
Её не нужно трогать! С самого начала освоения кликера мне не приходило в голову что либо записывать в системную переменную.
Если тебе нужны какие то операции то нужно сначала записать данные в обычные переменные и уж потом творить с ними что хочешь

Code: (clickermann) [Select]
$x = $_return1
$y = $_return2
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 04, 2013, 10:14:22 PM
Её не нужно трогать! С самого начала освоения кликера мне не приходило в голову что либо записывать в системную переменную.
Если тебе нужны какие то операции то нужно сначала записать данные в обычные переменные и уж потом творить с ними что хочешь

Code: (clickermann) [Select]
$x = $_return1
$y = $_return2


разбор про ошибку в $_return идет, а не про запись в нее значений вручную
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Oraven on July 05, 2013, 02:05:55 AM
разбор про ошибку в $_return идет, а не про запись в нее значений вручную

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

И никакой ошибки там нет, просто код надо правильно писать!
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 05, 2013, 05:11:27 AM

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

И никакой ошибки там нет, просто код надо правильно писать!

ты альтернативно одаренный, или просто iF_PICTURE_IN не юзал? есть там ошибка, мб только в последней версии, но есть
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: stivus on July 09, 2013, 03:26:59 AM
Ты суслика видишь?Нет?И я нет...А он там ЕСТЬ!
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 09, 2013, 09:00:29 PM
Ты суслика видишь?Нет?И я нет...А он там ЕСТЬ!

проверочный скрипт пишется за 3 минуты. чем звиздеть тут - напиши и проверь, как находит имадж, и что выдает потом в его отсутствии. а просто так флудорастничать любой петух сможет
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: stivus on July 10, 2013, 01:35:10 AM
Зачем мне проверочный?У меня оно и в рабочих работает....И если мне нужен клик в $_return1-оно кликает.А вот если ты пытаешься ложкой хлеб резать и жалуешься что ложка тупая и не режет-то кто же вам доктор?
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Oraven on July 10, 2013, 03:29:38 AM
проверочный скрипт пишется за 3 минуты. чем звиздеть тут - напиши и проверь, как находит имадж, и что выдает потом в его отсутствии. а просто так флудорастничать любой петух сможет

Скрипты, для начала, нужно правильно писать!

Вот пример:
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
   LCLICK($_return1, $_return2)
END_IF

То есть $_return1, $_return2 обычно заключены в условие которое разрешает или запрещает их использование. Картинка нашлась, в сист. переменные записываются координаты и производится клик, а если картинка не найдена то и клика не производится.

Если же нужно использовать полученные координаты в дальнейшем, то их нужно сразу записать в переменные:
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
   $x = $_return1
   $y = $_return2
   LCLICK($x, $y)
END_IF

WAIT(1)
$x = 300

LCLICK($x, $y)

За все время написания скриптов у меня не было проблем с системными переменными.
И хватит уже продолжать эту тему...
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 10, 2013, 11:27:20 AM
задрали тупить

//__________________________________________

logclear   

for ($olen, $olen < 10)
   
   getscreen     
     
   if_picture_in (73, 87, 152, 140, "pic.bmp")
     
   end_if
   
   print($_return1, " _ ", $_return2, " _ ", rnd (10, 99) )
   
   waitms( rnd (1000, 4000) )
   
end_cyc   

halt

//__________________________________________


 - проверочный скрипт, в качестве картинки - значек на рабочем столе, во время выполнения скрипта значек убирается и возвращается на место, "выравнивание по сетке" на рабочем столе лучше отключить, изменения пишутся в лог файл, проверяй и смотри результаты.

цикл if_picture_in работает если есть результат, если его нет - он весь просто пропускается, и поэтому переменная $_return остается прежнего значения, т.е. - если в теле цикла if_picture_in сделать перемещение мыши - оно будет работать строго по появлению картинки, а если пытаться вынести за тело цикла - тогда хрен, будет срабатывать каждый раз. это конечно не ошибка, просто недоработка цикла, но она ограничивает написание сложных макросов.

хотя... я как вижу, местным "гуру" это не мешает, сложных макросов не пишут...



Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 10, 2013, 11:58:40 AM
ну вот, пока срались, придумал простой костыль для обхода этой проблемы. нужно всего лишь в тело цикла  if_picture_in ввести постоянно изменяемую переменную, а затем после его выполнения (или невыполнения) проверять, изменилась ли она. ну и небольшой пример:

//__________________________________________


logclear

$prov0 = 0
$prov1 = 0

for ($olen, $olen < 20)
   
   getscreen
   
   if_picture_in (73, 87, 152, 140, "pic.bmp")
     
      $prov0 = rnd (1, 1000)
     
   end_if
   
   if ($prov1 ! $prov0)
   
   $prov1 = $prov0
     
      print (" есть картинка ")
     
   else
     
      print (" ничего нет ")
     
   end_if
   
   waitms( rnd (1000, 2000) )
   
end_cyc

halt

//__________________________________________
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: Oraven on July 10, 2013, 02:41:54 PM
Не пойму к чему такие сложности???

В первом примере как раз ты делаешь ошибку, пишешь системные переменные вне условия! Надо так:
Code: (clickermann) [Select]
logclear
for ($olen, $olen < 10)
   
   getscreen
   if_picture_in (73, 87, 152, 140, "pic.bmp")
      $x = $_return1
      $y = $_return2
   Else
      $x = 0
      $y = 0
   end_if
   
   print($x, " _ ", $y, " _ ", rnd (10, 99) )
   
   waitms( rnd (1000, 4000) )
   
end_cyc
halt

Второй пример писать нужно видимо так:
Code: (clickermann) [Select]
logclear

$prov = 0

for ($olen, $olen < 20)
   
   getscreen
   if_picture_in (73, 87, 152, 140, "pic.bmp")
      $prov = 1
   Else
      $prov = 0
   end_if
   
   if ($prov = 1)
      print (" есть картинка ")
   else
      print (" ничего нет ")
   end_if
   
   waitms( rnd (1000, 2000) )
   
end_cyc
halt
Title: Re: Не правильное присвоение значения переменной $_return1
Post by: skytear on July 10, 2013, 03:30:47 PM
странно, в  if_picture_in у меня не пахал else, мб писал неправильно. но если работает, то да, вообще без проблем. а про системные переменные вне условия вообще нигде не читал. спс за замечание