Автокликер Clickermann :: Форум
Основной раздел => Ошибки => Архив => Topic started by: Юрий on January 22, 2013, 09:03:52 AM
-
День добрый уважаемые товарищи и не товарищи.
В устройстве программ не знаю даже азов.
Познакомился с вашим творением Clickermann 4,7 недели две назад.
Просто балдею от этой программы сижу в ней все свои выходные это прикольно тремя инструментами строишь пиромиду хеопса, из констрктора лего собираешь ферари.
Программа классная.
$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
$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
Большая благодарность автору.
-
А кто такие "не товарищи".
Сразу вспомнилось: "Товарищи! Среди нас есть такие товарищи, которые нам совсем не товарищи" кц.
На самом деле я, например, не знаю что должно получится после COLORMODE(1) в котором 2097152 цветов при поиске цвета 16777215, что он там себе найдёт. Это только Джони может сказать. Может уходят отдельные составляющие в отрицательный диапазон. Но только зачем с этим разбираться? Применяй сознательно и всё будет нормально.
По поводу "Координате $_return1 - присваиваеться значение - $Pixcily"
Так это наоборот, $Pixcily присвоилось значение $_return1. PXLCOUNT возвращает результат в $_return1, а то, что ты сразу присвоил переменной $Pixcily результат пикселкоунта, ну так это ты сам так сделал.
Я просто всегда учитываю что $_return1, $_return2 не долгоживущие переменные и если их значение нужно долго, сразу присваиваю их другим переменным, что бы не держать в голове будут ли ещё IF_PIXEL_IN, IF_PICTURE_IN, PXLCOUNT и др. подобные до того момента как они тебе последний раз понадобятся.
-
Я сделал одну ошибку. Хоть после COLORMODE и другое количество цветов, номер у существующего цвета остаётся тот же самый.
По теме. Вчера мне потрепала нервы переменная $_return1. Кто бы мог подумать.
В скрипте уже был поиск IF_PICTURE_IN, так что $_return1 не нулевая.
Далее во вложенных циклах шёл IF_PICTURE_IN со смещаемыми координатами. Т.к. я уже воткнул
$x1=$_return1+$smeshenie между циклами, мне для правильного первого входа в цикл нужно было задать правильное $_return1.
$_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.
Можете сами проверить:
$_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 в не зависимости кто, что и где нашёл и пытается вернуть.
-
GETSCREEN обрезался в процессе вставке на форум :) . Исправил. Но всё сказанное верно.
-
GETSCREEN обрезался в процессе вставке на форум :) . Исправил. Но всё сказанное верно.
Да действительно!! Причем это даже в 4.3 версии есть
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта
-
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта
не только сохраняются, они еще и не обнуляются принудительно, не обнуляются при нулевом результате поиска картинки, гемор полный, единственный выход который я нашел - создал картинку в один пиксель и запускаю ее поиск, только так можно результаты $_return поменять.
-
А еще при значения $_return1 и $_return2 сохраняются при остановке скрипта
не только сохраняются, они еще и не обнуляются принудительно, не обнуляются при нулевом результате поиска картинки, гемор полный, единственный выход который я нашел - создал картинку в один пиксель и запускаю ее поиск, только так можно результаты $_return поменять.
Как объяснил разработчик, системные переменные это не обычные переменные и записывать в них категорически нельзя! Иначе будет создана уже несистемная переменная с таким же именем которая потом не будет меняться!
-
Как объяснил разработчик, системные переменные это не обычные переменные и записывать в них категорически нельзя! Иначе будет создана уже несистемная переменная с таким же именем которая потом не будет меняться!
она не обнуляется! хоть не трогай, хоть ты затрахай ее изменениями. в этом вся проблема. она меняется только когда идет запись в нее какого-либо найденного значения
-
Её не нужно трогать! С самого начала освоения кликера мне не приходило в голову что либо записывать в системную переменную.
Если тебе нужны какие то операции то нужно сначала записать данные в обычные переменные и уж потом творить с ними что хочешь
$x = $_return1
$y = $_return2
-
Её не нужно трогать! С самого начала освоения кликера мне не приходило в голову что либо записывать в системную переменную.
Если тебе нужны какие то операции то нужно сначала записать данные в обычные переменные и уж потом творить с ними что хочешь
$x = $_return1
$y = $_return2
разбор про ошибку в $_return идет, а не про запись в нее значений вручную
-
разбор про ошибку в $_return идет, а не про запись в нее значений вручную
Название темы видел? Автор пытался записать в системную переменную значение, чего делать нельзя!
Эти сист переменные обычно используются в условиях с поиском пикселов, то есть просто так по среди кода их не встретишь. В других случаях нужно использовать обычные переменные.
И никакой ошибки там нет, просто код надо правильно писать!
-
Название темы видел? Автор пытался записать в системную переменную значение, чего делать нельзя!
Эти сист переменные обычно используются в условиях с поиском пикселов, то есть просто так по среди кода их не встретишь. В других случаях нужно использовать обычные переменные.
И никакой ошибки там нет, просто код надо правильно писать!
ты альтернативно одаренный, или просто iF_PICTURE_IN не юзал? есть там ошибка, мб только в последней версии, но есть
-
Ты суслика видишь?Нет?И я нет...А он там ЕСТЬ!
-
Ты суслика видишь?Нет?И я нет...А он там ЕСТЬ!
проверочный скрипт пишется за 3 минуты. чем звиздеть тут - напиши и проверь, как находит имадж, и что выдает потом в его отсутствии. а просто так флудорастничать любой петух сможет
-
Зачем мне проверочный?У меня оно и в рабочих работает....И если мне нужен клик в $_return1-оно кликает.А вот если ты пытаешься ложкой хлеб резать и жалуешься что ложка тупая и не режет-то кто же вам доктор?
-
проверочный скрипт пишется за 3 минуты. чем звиздеть тут - напиши и проверь, как находит имадж, и что выдает потом в его отсутствии. а просто так флудорастничать любой петух сможет
Скрипты, для начала, нужно правильно писать!
Вот пример:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
LCLICK($_return1, $_return2)
END_IF
То есть $_return1, $_return2 обычно заключены в условие которое разрешает или запрещает их использование. Картинка нашлась, в сист. переменные записываются координаты и производится клик, а если картинка не найдена то и клика не производится.
Если же нужно использовать полученные координаты в дальнейшем, то их нужно сразу записать в переменные:
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)
За все время написания скриптов у меня не было проблем с системными переменными.
И хватит уже продолжать эту тему...
-
задрали тупить
//__________________________________________
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 сделать перемещение мыши - оно будет работать строго по появлению картинки, а если пытаться вынести за тело цикла - тогда хрен, будет срабатывать каждый раз. это конечно не ошибка, просто недоработка цикла, но она ограничивает написание сложных макросов.
хотя... я как вижу, местным "гуру" это не мешает, сложных макросов не пишут...
-
ну вот, пока срались, придумал простой костыль для обхода этой проблемы. нужно всего лишь в тело цикла 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
//__________________________________________
-
Не пойму к чему такие сложности???
В первом примере как раз ты делаешь ошибку, пишешь системные переменные вне условия! Надо так:
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
Второй пример писать нужно видимо так:
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
-
странно, в if_picture_in у меня не пахал else, мб писал неправильно. но если работает, то да, вообще без проблем. а про системные переменные вне условия вообще нигде не читал. спс за замечание