Войти

Показать полную графическую версию : [решено] Глобальные переменные (?)


Frost_Imp
28-07-2009, 15:14
Всем доброго времени суток!
Возник у меня вопрос следующего характера: есть функция, которая определяет границы прямоугольника PixelCheckSum
MsgBox(0, "Определение маяков", "Через 5 секунд указатель должен быть на левой границе маяков")
sleep(5000)
$mayak1 = MouseGetPos()
$coord = PixelGetColor( $mayak1[0] , $mayak1[1] )
_FileWriteLog(@ScriptDir & "\log.txt","Левая граница маяков " & $mayak1[0])
MsgBox(0,"Определение левой границы маяков завершено ", $mayak1[0] )
sleep (1000)
Указанный код, разумеется, для одной из границы, он повторяется еще три раза. В этой функции меня интересуюи переменные $mayak1[0] , $mayak1[1] и другие.
Делаю, собственно, чексумм
$norm_beacon = PixelChecksum ( $mayak1[0], $mayak2[1], $mayak3[0], $mayak4[1], 1 )
Вначале скрипта я объявляю эти переменные как глобальные
Global $mayak1[0]
Global $mayak2[1]
Global $norm_beacon
Потом пытаюсь использовать в другой функции при сравнении сумм пикселей
$querty_beacon = PixelChecksum ( $mayak1[0], $mayak2[1], $mayak3[0], $mayak4[1], 1 )
_FileWriteLog(@ScriptDir & "\log.txt","Контрольная сумма пикселей при проверке " & $querty_beacon)
if $querty_beacon = $norm_beacon Then
и получаю ошибку
Array variable subscript badly formatted.:
Global $mayak1[0]
Global $mayak1[^ ERROR
Что я делаю не так?

Frost_Imp
28-07-2009, 15:30
И сразу вопрос вдогонку, как может получиться в SciTE, что по ctrl+F5 пишет
0 error(s), 0 warning(s)
а при попытке запуска скрипта выдает
Array variable subscript badly formatted.:
global $pos1[0], $pos1[1], $pos2[0], $pos2[1], $pos3[0], $pos3[1], $pos4[0], $pos5[0], $pos5[1], $pos6[0], $pos6[1]
global $pos1[^ ERROR
Или нельзя декларировать переменные вида
$pos1[0] то есть со значением в квадратных скобках? Такие переменные появляются при определении координат позиции курсора. Как мне тогда сохранить эти координаты, чтоб эти значение можно было использовать в других функциях одного скрипта?
P.S. Вероятно, это более понятное изложение вопроса, который я задал в первом посте =)

amel27
28-07-2009, 16:07
получаю ошибку
Array variable subscript badly formatted.:
Global $mayak1[0]
Global $mayak1[^ ERROR
Что я делаю не так? »
пытаетесь объявить одномерный массив размерностью 0, объявляйте просто "Global $mayak1", а тип данных (одномерный массив размерности 2) будет задан функцией MouseGetPos()

Такие переменные появляются при определении координат позиции курсора »как уже сказал, получаете объявление не переменных, а массивов - в объявлении тип данных указывать не обязательно

Frost_Imp
28-07-2009, 16:33
То есть вместо
global $pos1[0], $pos1[1], $pos2[0], $pos2[1], $pos3[0], $pos3[1], $pos4[0], $pos5[0], $pos5[1], $pos6[0], $pos6[1]
пишем
global $pos1, $pos2, $pos3, $pos4, $pos5, $pos6
?
Спрашиваю, так как пока нет возможности проверить ксрипт на деле. Дебагер ошибку выдавать вроде перестал...
Просто если я объявляю $pos1, а использую значение $pos1[1] - это нормально?

Creat0R
28-07-2009, 16:48
если я объявляю $pos1, а использую значение $pos1[1] - это нормально? »
Не совсем. Выдача ошибки полностью зависит от успеха функции «MouseGetPos()», т.е нужно ещё проверять если она вернула массив:

$mayak1 = MouseGetPos()
If IsArray($mayak1) Then PixelChecksum(...)

как может получиться в SciTE, что по ctrl+F5 пишет
0 error(s), 0 warning(s)
а при попытке запуска скрипта выдает
Array variable subscript badly formatted.: »
Очень просто - первое это проверка синтаксиса, а с синтаксисом в этом случае всё в порядке, тут проблема образуется на лету, для это и нужно делать что называется Error Checking (проверки на ошибочность - см. пример выше).
Хм, действительно, это видимо недочёт проверки синтаксиса.

amel27
28-07-2009, 17:02
т.е нужно ещё проверять если она вернула массив »ИМХО это перебор, конкретно для MouseGetPos() не предусмотрен такой исход ;)
...хотя для большинства других ф-ций это необходимо - надо смотреть справку

Creat0R
28-07-2009, 17:10
конкретно для MouseGetPos() не предусмотрен такой исход »
Знаю... мне просто показалось что Frost_Imp указывает именно на эту ошибку, но сейчас я перечитал его сообщения, и понял что ошибка совсем в другом - в некорректном объявлении переменных (на что ты сразу и указал :) ).

Тогда я пожалуй поправлю свой ответ на вопрос о несхожести проверки синтаксиса...

Frost_Imp
29-07-2009, 09:28
пытаетесь объявить одномерный массив размерностью 0, объявляйте просто "Global $mayak1", а тип данных (одномерный массив размерности 2) будет задан функцией MouseGetPos() »
Благодарю! Этот совет помог!

Creat0R
29-07-2009, 15:12
Благодарю! Этот совет помог! »
Для благодарностей есть ссылка под каждым сообщением: Полезное сообщение :)




© OSzone.net 2001-2012