Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Поворот с торможением (http://www.flasher.ru/forum/showthread.php?t=169847)

Ylik 13.10.2011 09:34

Поворот с торможением
 
Здравствуйте! Возник вопрос по-поводу поворота мувиклипа вокруг своей оси за мышью.
Я знаю, что это можно реализовать простым вычислением:
Код AS1/AS2:

mc._rotation = angle * 180/Math.PI;

Но можно ли организовать поворот мувиклипа за мышью с некоторой задержкой? Например, мышь летит уже в противоположную сторону, а мувиклип ещё поворачивается в прежнюю сторону (но потом он всё же начинает поворачиваться за мышью) и т. д...
Спасибо большое за внимание к моему вопросу! Я буду очень рада узнать ответ на этот вопрос! :)

goodguy 13.10.2011 09:48

у TweenMax есть свойство shortRotation.
Похоже как раз для этого случая.
Хотя можно и свой алгоритм придумать. Я делал свой на ас3.

dark256 13.10.2011 11:48

А вот алгоритмы изингов разных, так сказать изнутри:

http://gizma.com/easing/

mooncar 13.10.2011 12:05

У TweenLite есть параметр задержки выполнения твина.
Например:
Код AS1/AS2:

var tw1:TweenLite = new TweenLite(mc, 0.8, { _rotation:angle * 180/Math.PI, delay:0.3 });

Здесь поворот начнется не сразу, а спустя 300 мс после его вызова, и будет происходить 800 мс, что уже само по себе дает некоторую задержку.
Поэтому можно наверное даже и без delay обойтись - поэкспериментируйте.

PS. "Поворот с торможением" - смысл в этой фразе иной, чем то, что вам нужно - "поворот с задержкой".

crazyone 13.10.2011 13:07

Очевидно же, что в случае поворота за курсором твин библиотеки не помогут. Если создавать при каждом onMouseMove новую анимацию - дела не выйдет.
Нужно писать свой обработчик. Что-то типа такого:
Код AS1/AS2:

var angleTo;
var rotationSpeed=0;
onMouseMove=function(){
    angleTo=Math.atan2(mc._ymouse,mc._xmouse)*180/MathPI; // вычисляем нужный угол
}
onEnterFrame=function(){
    rotationSpeed+=(angleTo-mc._rotation)/4; // увеличиваем скорость вращения
    mc._rotation+=rotationSpeed; // поворачиваем объект
    rotationSpeed*=0.9; // это влияние "трения"
}


mooncar 13.10.2011 13:26

Цитата:

Сообщение от crazyone (Сообщение 1038839)
Если создавать при каждом onMouseMove новую анимацию - дела не выйдет.

Именно так и надо делать, очевидно, что не нужно писать свой обработчик. Просто вычислять нужный угол в обработчике onMouseMove и тут же запускать новый твин.
Нюанс в том, что TweenLite - это готовый мощный класс, и если не использовать параметр overwrite:false или не использовать OverwriteManager, то каждый новый экземпляр твина убивает предыдущий твин на мувике и все происходит гладко.
Постоянно использую такую схему - и при линейной анимации, и при анимации масштабирования, при кручении...

Ylik 14.10.2011 00:20

Спасибо большое за ответы! Попробую поэкспериментировать! :)

crazyone 14.10.2011 01:28

2mooncar:
Ну, можно похоливарить на тему забивания гвоздей пасатижами, но я не в том настроении.

Просто скажите - вы используете изинги в своей програмной анимации, которую постоянно оверрайтите?

mooncar 14.10.2011 10:50

Цитата:

Сообщение от crazyone (Сообщение 1039043)
вы используете изинги в своей програмной анимации, которую постоянно оверрайтите?

Явно нет.
Но какой-то там всегда есть по умолчанию , даже если не прописаны.


Часовой пояс GMT +4, время: 12:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.