This version of the page http://www.homeware.com.ua/105968.php (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2008-12-02. The original page over time could change.
Все про ActionScript в деталях и не только... - wfsection-Движение: замедление и отскакивание
Первая • Новости • Форум • Мой профиль • Поиск • Регистрация
Меню сайта
Материалы
Login
Пользователь:

Лозунг:


Забыли лозунг?

Регистрация
Реклама



Движение: замедление и отскакивание
Сочинитель: action ((Работа в Днепропетровске, Киеве, Харькове, Одессе. Вакансии и резюме. Поиск работы и сотрудников, трудоустройство. Работа в Украине и за рубежом. Вакансии ))
Опубликовано: Thu, 25-Aug-2005
Рейтинг 9.83
Оценок: 6
читать: 2165 время
Размер статьи: 7.77 KB


Это руководство охватывает тему «замедление движения». часто задают урок: «Как сделать так, чтобы объект, движущийся к определенной точке, плавно замедлял свое движение по мерке приближения к цели, аккуратно вставая на пространство?»

Представьте, что вы ведете машину по шоссе со скоростью 60 км/ч, направляясь домой. Вы же не станете ехать со скоростью 60 км/ч вплоть до подъезда вашего дома чтобы мгновенно остановиться как только прибудете на пространство. Вы замедлите скорость до 40, затем до 25, 15, 10, 6, 4, 2, 1 и остановитесь. И начинаете движение вы подобным ликом, постепенно набирая скорость. Это будет «разгон». Я собираюсь в этом руководстве поговорить о «замедлении» и постараюсь сделать это поподробней.

Замедление реализуется посредством одной простой формулы, какую можно подогнать или модифицировать так, чтобы создать именно тот эффект, который вы хотите. Однажды разобравшись, вы можете использовать ее не только для движения, но и для изделия эффектов при вращении объектов, при масштабировании, прозрачности и даже изменении колера. В ситуации, когда вы хотели бы плавно изменить какое-либо положение.

Ну ладно, давайте разбираться с физикой.

Вы находитесь в каком-то одном пространстве и хотите попасть в другое.

Сначала давайте сделаем это в лике прыжка. Мы создадим объект и ситуацию, к какими будем работать на протяжении всего этого руководства. Создайте что-нибудь выкройки по вашему отбору, сконвертируйте это в мувиклип и вставьте последующий код:

onClipEvent(load){
_x=0;
_y=0;
}
onClipEvent(mouseDown){
targetx=_root._xmouse;
targety=_root._ymouse;
}

onClipEvent(enterFrame){
_x=targetx;
_y=targety;
}

что он делает:

1. Сначала помещает объект в 0,0
2. Когда нажимается кнопка мыши, то координаты мыши помещаются в targetx и targety
3. Перемещает координаты мувиклипа в targetx и targety

Проверьте. Где бы ни был объект, когда вы кликаете мышкой, объект перемещается под мышиный курсор. Он делает это мгновенно, в одном фрейме.

Отлично, теперь давайте сделаем первое замедление. Теория последующая:

1. Мы знаем, где мы находимся.
2. Мы знаем, куда мы хотим перейти.
3. Мы можем оценить расстояние отсюда до сюда.
4. Мы перемещаемся ровно на половину расстояния.
5. С нашей новой позиции...

1. Мы опять знаем, где находимся.
2. Куда мы идем, мы тоже знаем – оно не менялось.
3. Вычисляем новое расстояние.
4. Перемещаемся ровно на половину расстояния.
5. Опять начинаем с п. 1.

С ежедневным витком цикла мы движемся все меньше и меньше. Так мы начинаем движение довольно быстро и движемся все медленнее и медленнее по мерке приближения к цели. Духовно, мы никогда по-действительному не достигнем цели, ведь не важно насколько мы близки к ней, мы всегда делаем половину шага. Но когда вы на расстоянии 1/100-й пикселя от цели, вы можете спокойно считать, что достигли ее!

Итак, переводя все это на ActionScript, я сначала, для ясности, проведу каждое вычисление в особой линии кода. Позже я покажу вам укороченную формулу, какая должна намертво запечатлеться в вашем мозгу. Также, для простоты, мы начнем с движения только по _x. Затем мы просто добавим подобные же черты для _y.

Вот оно:

onClipEvent(load){
_x
_x=0;
distx
_y=200;
}

onClipEvent(mouseDown){
targetx=_root._xmouse;
movex
}

new _x
onClipEvent(enterFrame){
distx=targetx-_x;
movex=distx/2;
_x+=movex;
}

(замечание: Некие люди спрашивали, что такое «+=». Это оператор инкрементирующего присваивания. Он берет переменную, прибавляет к ней значение и присваивает результат обратно той же переменной. Т.е. _x+=movex означает то же самое, что самое, что и _x=_x+movex )

Говоря диалектом шагов, описанных нами ранее:

1. Мы находимся в _x.
2. Мы хотим попасть в targetx.
3. Дистанция равна targetx-x или distx
4. Половина distx равна distx/2, какую мы присваиваем movex и затем прибавляем к _x: _x+=movex.
5. Последующий фрейм начинается с п.1.

Проверьте это. Теперь, когда мы кликаем мышкой, объект не просто сразу прыгает в эту точку, но плавно скользит туда. Да, конечно на этой стадии мы движемся лишь в горизонтальной плоскости, т.к. мы еще ничего не делали с _y. До того, как мы займемся ей, давайте сделаем наш код более тесным и избавимся от нескольких излишних переменных. Надеюсь, вы сможете разобраться в этих изменениях:

onClipEvent(load){
_x=0;
_y=200;
}

onClipEvent(mouseDown){
targetx=_root._xmouse;
}

onClipEvent(enterFrame){
_x+=(targetx-_x)/2;
}

Теперь в одной линии: _x+=(targetx-_x)/2 мы определяем расстояние, делим его на 2 и прибавляем к _x.

Если вы следили за мыслью до этого пространства, то можете спокойно сами добавить свой код для _y. Не забудьте targety в первом блоке кода:

onClipEvent(load){
_x=0;
_y=0;
}

onClipEvent(mouseDown){
targetx=_root._xmouse;
targety=_root._ymouse;
}

onClipEvent(enterFrame){
_x+=(targetx-_x)/2;
_y+=(targety-_y)/2;
}

Проверьте это, объект должен плавно переместиться прямо в точку, какую вы кликнете. Довольно круто до сих пор, но мы еще не закончили.

Если я вижу цифру в коде, вида «2» в нашем, это меня раздражает. Я почти всегда стремлюсь заменить их переменными, особенно, если я могу захотеть поменять их в определенный момент (это то, что мы собираемся сделать). Вот безапелляционный код, который мы будем использовать:

onClipEvent(load){
_x=0;
_y=0;
speed=2;
}

onClipEvent(mouseDown){
targetx=_root._xmouse;
targety=_root._ymouse;
}

onClipEvent(enterFrame){
_x+=(targetx-_x)/speed;
_y+=(targety-_y)/speed;
}

Теперь довольно очевидно и естественно поиграть с переменной speed. Если вы установите ее в 1, то увидите, что клип ведет себя точно так же, как настоящий первый, который мы сделали. Объект просто прыгнет в цель за один шаг. чем выше значение переменной speed, тем медленнее будет движение.

Предположим, мы установили ее в 10. Программа посчитает расстояние перемещения и будет двигаться лишь на 1/10 этого расстояния. Затем на 1/10 оставшегося расстояния. Все перемещение займет долгое время. Вы можете подогнать эту переменную, чтобы создать именно тот эффект, который вы хотите.

И еще один бонус. Попробуйте установить переменную speed где-то между 0.5 и 1.0. Я обнаружил, что 0.6 приводит к вкусному эффекту. Создается эффект «отскакивания» или «резинки». Вы теперь делите расстояние на дробное количество. Это заставляет объект двигаться дальше, чем дистанция до цели. Он перелетает цель и улетает дальше. Затем он летит обратно, снова перелетает, но уже не настолько далеко, как в первый раз. И так далее, пока не остановится.

Вот и все, что я хотел сказать про замедление. На настоящем действии, существуют более затейливые формулы, которые используют разные математические функции, но я думаю, что вы обнаружите, что приведенная формула довольно беглый и простой путь достижения необычайного результата в 99% инцидентов. Привыкнув к ней, вы можете экспериментировать с иными качествами мувиклипов: _rotation, _alpha, scale и так далее. В мнение, я хочу привести всеобщую формулу, какую вы должны запомнить:

СледующийШаг = (КудаМыХотимПойти – ГдеМыСейчасНаходимся)/Скорость;

Все обычно заканчивается на формуле:

Качество = (Цель – Качество) / Скорость;

Коперайт:

Сочинитель : Кейт Петерс (Вакансии в Ставрополе. Работа для студентов. )
Перевод: Антон Жучков

за матеріалами сайту http://www.homeware.com.ua/




1 2 3 4 5 6 7 8 9 10
[ Вернуться в раздел | Вернуться на первую страницу ]
Комментарии принадлежат их сочинителям. Мы не несем ответственности за их содержание.
Движение: замедление и отскакивание
© copyright 2008 action & Все про ActionScript в деталях и не только...
Реклама
Электронная тайна по изделию флеш-потех

Хотите научится создавать флеш-потехи? Нет ничего проще!

Флеш-исходники
Рассылки сайта
Content.mail.ru
Программирование в Macromedia Flash ActionScript от А до Я
Subscribe.Ru
Пользительные приемы в Macromedia Flash
ActionScript
Maillist.ru
Программирование в Macromedia Flash
ActionScript
Who's Online
2 пользователь(ей) активно (2 пользователь(ей) просматривают Библиотека статей)

Дольщиков: 0
Посетителей: 2

далее...
New Members
FENGshui 13/07/2008
zhorra 11/07/2008
Yakh 05/07/2008
maltcev 28/06/2008
VsevMart 25/06/2008
dokumentrf 23/06/2008
weberart 21/06/2008
ijojeg 19/06/2008
seomaz 19/06/2008
deos 18/06/2008

Copyright © 2004-2006
Nissan Off Road Club - тест nissan фигурки lego