использование порядка вычислений
как это ни странно, но существует установленный порядок вычисления выражений. В общем он не особенно отличается от того, к которому мы привыкли, только почему-то всё наоборот :)). 1+1=2 это мы учили в школе. 2=1+1 утверждает макромедия. К этому, впрочем, достаточно быстро привыкаешь. И этим даже можно пользоваться. Начнем с простейшего:
a = 0;
b = 0;
легко заменяется на:
a=b=0;
и понятно без комментариев. Но вполне возможны и не такие очевидные упрощения, например выражение:
speed += 1 // увеличиваем значение переменной на единицу
_x += speed // изменяем _x позицию объекта на новое значение speed
можно заменить на
_x+=speed+=1
при этом логика совершенно не изменится: и speed будет увеличиваться и позиция объекта будет изменяться на новое значение speed. То есть это выражение идентично было бы мной описано как и предыдущие две строки. Что это мы всё на котятах! Давайте рассмотрим реальный пример, кстати один из моих любимых:
как обычно делаем мувик и пишем скрипт:
onClipEvent (enterFrame) { // каждый кадр
_y += sty=(sty+_ymouse*.3)*.8;
_x += stx=(stx+_xmouse*.3)*.8; // 0,3 расстоЯниЯ между центорм мувика и мышкой (по соответствующей оси) прибавлЯем к текущему значению шага, эту сумму умножаем на 0,8 длЯ эффекта затуханиЯ, результат присваиваем новому значению шага и новое значение шага прибавлЯем к значению текущей позиции. Всё это делаем как длЯ _x так и длЯ _y координаты мувика.
}
Оцените функциональность скрипта, это всего-то при двух строках кода.
И еще раз вернемся к порядку вычислений. Я пошагово выделю порядок вычисления скрипта: красным - исполняется, синим - уже вычислено, черным - еще не вычислено и пока не исполняется.
_y += sty=(sty+_ymouse*.3)*.8;
_y += sty=(sty+_ymouse*.3)*.8;
_y += sty=(sty+_ymouse*.3)*.8;
_y += sty=(sty+_ymouse*.3)*.8;
_y += sty=(sty+_ymouse*.3)*.8;
то же самое в цифрах, только буду заменять вычисленные выражения их результатами и чуть подробней, учтя шаг получения из переменной ее значения: допустим что в каком-то из кадров просчитывается скрипт при текущих значениях sty = 10, _ymouse = 100, _y = 20
_y += sty=(sty+_ymouse*.3)*.8; - получаем значение свойства _ymouse
_y += sty=(sty+100*.3)*.8; - результат
_y += sty=(sty+100*.3)*.8;- вычисляем произведение значений
_y += sty=(sty+30)*.8; - результат
_y += sty=(sty+30)*.8;- получаем значение из переменной sty
_y += sty=(10+30)*.8;- результат
_y += sty=(10+30)*.8;- вычисляем сумму значений
_y += sty=40 *.8;- результат
_y += sty=40 *.8;- вычисляем произведение значений
_y += sty=36;- результат
_y += sty=36;- присваиваем новое значение переменной sty
_y += sty;- результат: переменная sty содержит новое значение
_y += sty;- получаем новое значение из переменной sty
_y += 36;- результат
_y += 36; - операция += (назначение сложения) заменяет выражение на
_y = _y + 36;- результат
_y = _y + 36;- получаем текущее значение свойства _у
_y = 20 + 36; - результат
_y = 20 + 36;
_y = 56;
Задание: примените скрипт эластика к масштабу _xscale, _yscale мувиклипа.