Author Topic: Не правильное присвоение значения переменной $_return1  (Read 20536 times)

0 Members and 1 Guest are viewing this topic.

Юрий

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
День добрый уважаемые товарищи и не товарищи.
В устройстве программ не знаю даже азов.
Познакомился с вашим творением 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

Большая благодарность автору.
« Last Edit: January 22, 2013, 09:56:46 AM by Johnny »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А кто такие "не товарищи".
Сразу вспомнилось: "Товарищи! Среди нас есть такие товарищи, которые нам совсем не товарищи"  кц.

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

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

Я просто всегда учитываю что $_return1, $_return2 не долгоживущие переменные и если их значение нужно долго, сразу присваиваю их другим переменным, что бы не держать в голове будут ли ещё IF_PIXEL_IN, IF_PICTURE_IN, PXLCOUNT и др. подобные  до того момента как они тебе последний раз понадобятся.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Я сделал одну ошибку. Хоть после 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 в не зависимости кто, что и где нашёл и пытается вернуть.
« Last Edit: January 31, 2013, 10:45:52 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile

GETSCREEN обрезался в процессе вставке на форум :) . Исправил. Но всё сказанное верно.
« Last Edit: January 31, 2013, 10:47:24 AM by Vint »


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile

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

Да действительно!! Причем это даже в 4.3 версии есть
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
 
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта

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

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта

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

Как объяснил разработчик, системные переменные это не обычные переменные и записывать в них категорически нельзя! Иначе будет создана уже несистемная переменная с таким же именем которая потом не будет меняться!

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
 
Как объяснил разработчик, системные переменные это не обычные переменные и записывать в них категорически нельзя! Иначе будет создана уже несистемная переменная с таким же именем которая потом не будет меняться!

она не обнуляется! хоть не трогай, хоть ты затрахай ее изменениями. в этом вся проблема. она меняется только когда идет запись в нее какого-либо найденного значения

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Её не нужно трогать! С самого начала освоения кликера мне не приходило в голову что либо записывать в системную переменную.
Если тебе нужны какие то операции то нужно сначала записать данные в обычные переменные и уж потом творить с ними что хочешь

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

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
Её не нужно трогать! С самого начала освоения кликера мне не приходило в голову что либо записывать в системную переменную.
Если тебе нужны какие то операции то нужно сначала записать данные в обычные переменные и уж потом творить с ними что хочешь

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


разбор про ошибку в $_return идет, а не про запись в нее значений вручную
« Last Edit: July 04, 2013, 11:22:22 PM by skytear »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
разбор про ошибку в $_return идет, а не про запись в нее значений вручную

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

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

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile

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

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

ты альтернативно одаренный, или просто iF_PICTURE_IN не юзал? есть там ошибка, мб только в последней версии, но есть

stivus

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Ты суслика видишь?Нет?И я нет...А он там ЕСТЬ!

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
Ты суслика видишь?Нет?И я нет...А он там ЕСТЬ!

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

stivus

  • Освоившийся
  • **
  • Posts: 35
    • View Profile
Зачем мне проверочный?У меня оно и в рабочих работает....И если мне нужен клик в $_return1-оно кликает.А вот если ты пытаешься ложкой хлеб резать и жалуешься что ложка тупая и не режет-то кто же вам доктор?