использование порядка вычислений

 

как это ни странно, но существует установленный порядок вычисления выражений. В общем он не особенно отличается от того, к которому мы привыкли, только почему-то всё наоборот :)). 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 мувиклипа.

 

Hosted by uCoz