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

0 Members and 1 Guest are viewing this topic.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
проверочный скрипт пишется за 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)

За все время написания скриптов у меня не было проблем с системными переменными.
И хватит уже продолжать эту тему...
« Last Edit: July 10, 2013, 03:49:49 AM by Oraven »

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
задрали тупить

//__________________________________________

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 сделать перемещение мыши - оно будет работать строго по появлению картинки, а если пытаться вынести за тело цикла - тогда хрен, будет срабатывать каждый раз. это конечно не ошибка, просто недоработка цикла, но она ограничивает написание сложных макросов.

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




skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
ну вот, пока срались, придумал простой костыль для обхода этой проблемы. нужно всего лишь в тело цикла  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

//__________________________________________
« Last Edit: July 10, 2013, 12:00:18 PM by skytear »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Не пойму к чему такие сложности???

В первом примере как раз ты делаешь ошибку, пишешь системные переменные вне условия! Надо так:
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

skytear

  • Освоившийся
  • **
  • Posts: 20
    • View Profile
странно, в  if_picture_in у меня не пахал else, мб писал неправильно. но если работает, то да, вообще без проблем. а про системные переменные вне условия вообще нигде не читал. спс за замечание