Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Плавное торможение (http://www.flasher.ru/forum/showthread.php?t=142478)

dow 22.07.2010 10:03

Плавное торможение
 
Как в следующем коде изобразить плавную остановку поворота, при условии line_mc.rotationY>30. Сейчас клип резко останавливается при этом условии,если условие убрать,то останавливается плавно при подходе к курсору. Но надо именно с этим усолвием его плавно остановить.
Код AS3:

speed=0.01                                         //Константа скорости
deltadistX=mouseX-line_mc.x;                //Разница клипа и курсора
line_mc.rotationY+=speed*deltadistX*-1  //Поворот
if (line_mc.rotationY>30) {
        line_mc.rotationY=30                //Резкая остановка
        }

Вобще,мне кажется решение такое должно быть
deltadistX-=0.5;1;1.5;2...etc и так до полной остановки,но как программно изобразить-хз.
Надеюсь на помощь..

enepx 22.07.2010 13:50

Советую Вам создать метод, например, rotationTo(angle:Number), который будет плавно доворачивать Ваш объект до нужного угла, который не более 30 градусов.

Tr1te 22.07.2010 13:54

Tween классом можно.
http://help.adobe.com/ru_RU/AS3LCR/F...n.html#Tween()

Класс Elastic определяет три функции замедления, реализующие движение в анимациях с использованием сценариев ActionScript, в которых движение происходит по экспоненциально затухающей синусоиде.

proxiServer 22.07.2010 14:02

dow, код где? В кадре? что вообще происходит?))
Цитата:

Вобще,мне кажется решение такое должно быть
deltadistX-=0.5;1;1.5;2...etc и так до полной остановки,но как программно изобразить-хз.
например вот так
Код AS3:

deltadistX+=0.5;

при начальном значении 0.5 получим ваш ряд)

-De- 22.07.2010 14:12

Код AS3:

speed=10;                                        //переменная угловой скорости
if (line_mc.rotationY>30) {
        var acceleration:int = -1;//ускорение
        speed += acceleration;
        if(speed < 0) speed = 0;
        }
line_mc.rotationY+=speed;  //Поворот


enepx 22.07.2010 14:15

Как я понял надо уже замедляться в максимальном значении 30, а не после 30 начинать замедление.

dow 22.07.2010 14:38

Цитата:

dow, код где? В кадре? что вообще происходит?))
Простите дурака)
Код AS3:

 addEventListener(Event.ENTER_FRAME,sdf); 
function sdf(event:Event) { ....вышеописанный код}

Цитата:

Как я понял надо уже замедляться в максимальном значении 30, а не после 30 начинать замедление.
Нужно замедлять до полной остановки после того,как line_mc.rotationY=30
Цитата:

speed=10; //переменная угловой скорости
if (line_mc.rotationY>30) {
var acceleration:int = -1;//ускорение
speed += acceleration;
if(speed < 0) speed = 0;
}
line_mc.rotationY+=speed; //Поворот
Ну да,но тут без взаимодействия с курсором. Мне необходимо,чтобы сцена двигалась в зависимости от положения курсора..но когда сцена уже "сильно" повернута,то плавно останавливалась..
Цитата:

Tween классом можно.
Попробую..

incvizitor 22.07.2010 17:40

dow, попробуйте так:

Код AS3:

speed=(30-line_mc.rotationY)/3;

В смысле, чем ближе Вы к значению 30, тем скорость медленнее. Но что бы был какой то минимум скорости можно так:

Код AS3:

speed=Math.max((30-line_mc.rotationY)/3, 0.5);


enepx 22.07.2010 17:42

Блин, хотел не писать, но напишу: юзайте Tweener, будет вам однострочное счастье :)

incvizitor 22.07.2010 19:31

А еще лучше TweenLite:

http://www.greensock.com/tweening-speed-test/


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

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