ActionScript 3 весы Пример
Описание задачи
Сделать весы как в жизни. Чтоб можно было бросать на чашу разные штуки и весы качались, качались и склонялись в нужную сторону.
Математика простая. Все достигается перемножением двух функций sin и exp. В терминах ActionScript - Math.pow(t)*Math.sin(t)
Надо чтобы все получилось примерно как на такой картинке:
Добавляем слушателя:
stage.addEventListener(Event.ENTER_FRAME, _scaleHandler);
В функции _scaleHandler вычисляем поворот планки весов для каждого кадра. Чтобы приблизить движения к реальным, в функции добавляем коэффициенты.
function _scaleHandler(e:Event):void{ if(ves.left.weight > ves.right.weight){ ves.rotation = -(angle-Math.pow(.2,a)*60) - (Math.sin(.5*a))*(Math.pow(0.92,a))*15; prevState = 1; }else if(ves.left.weight < ves.right.weight){ ves.rotation = (angle-Math.pow(.2,a)*60) + (Math.sin(.5*a))*(Math.pow(0.92,a))*15; prevState = 2; }else if(ves.left.weight == ves.right.weight){ if(prevState == 1){ ves.rotation = (angle-Math.pow(.5,a)*20) + (Math.sin(.5*a))*(Math.pow(0.92,a))*15; }else if(prevState == 2){ ves.rotation = -(angle-Math.pow(.5,a)*20) - (Math.sin(.5*a))*(Math.pow(0.92,a))*15; }else{ ves.rotation = - (Math.sin(.5*a))*(Math.pow(0.92,a))*15 } } a = a+.2; ves.left.rotation = -ves.rotation; ves.right.rotation = -ves.rotation; }
Чашки весов я поместил внутрь мувика с планкой. Такое расположение позволяет нам легко выравнивать чаши в горизонтальном положении в каждом кадре:
ves.left.rotation = -ves.rotation; ves.right.rotation = -ves.rotation;
Для наглядности я добавил три кнопки. Они будут эмулировать загрузку весов. Каждый может нагружать на весы разные вещи. Это достаточно просто сделать. В результате получились такие вот весы:
Файлы, используемые в статье.
Упакованный fla файл весов .zip
Санкт-Петербург Зима 2011