Форум 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=135859)

Himerets 03.02.2010 16:33

Реализовать плавное движение
 
Надо реализовать движение по прямой (вертикально вниз), чтоб оно было как можно менее дерганым.

Вот такой скрипт приводит к довольно дерганному движению:

Код AS3:

var c:Sprite = new Sprite();
var a:Bitmap = new MottonBlue();
c.addChild(a);
addChild(c);
c.x = 320;
var t:TweenMax = new TweenMax(c, 1, { y:450 } );
t.ease = Linear.easeNone;
t.addEventListener(TweenEvent.COMPLETE,
    function (e:TweenEvent):void { t.restart() } );

Вариации с TweenLite/Timer/EnterFrame существенных изменений не вносят.

Возможно ли вообще сделать это? Или это предел, плавнее уже некуда?

TWETTI 03.02.2010 16:43

А frameRate(частота кадров) сколько у вас стоит? Чем выше частота, тем более плавнее будет.

Himerets 03.02.2010 16:47

Да не, не помогает
стоит 300)

Serg65535 04.02.2010 01:20

Возможно это не совсем то, что вам надо, но ещё существуют так называемые алгоритмы субпиксельного движения, когда за один такт нужно сдвинуть объект на расстояние, меньшее, чем один пиксель. Все они основаны на особенностях антиальясинга объекта. Если вы двигаете битмап, то это достаточно просто. Вот сходу пример этого подхода:
http://habrahabr.ru/blogs/javascript/67179/

derhab 04.02.2010 09:47

попробуйте
Код AS3:

c.scaleX = 1.001 или c.scaleY = 1.001


Himerets 04.02.2010 11:20

Сверхплавное движение - это, конечно, впечатляет, но у меня там шаг наверно в 7-10 пикселей, так что достаточно снизить до 1 или 2. И, кстати, у меня получилось. Я понизил фпс до 30ти, твин заменил на таймер с задержкой 2 мс, и в хэндлере таймера сделал .updateAfterEvent().

Но за статью все равно спасибо, интересная штука, раньше про это не слышал.

derhab, а что даст c.scaleX = 1.001 или c.scaleY = 1.001 ?

Diestro 04.02.2010 11:40

Поставьте сглаживание для Bitmap.

Zebestov 04.02.2010 13:07

Была уже такая тема. Других вариантов нет — сделай картинке небольшой scaleX (или scaleY), например 0.99. Или, как альтернатива, уменьши высоту (или ширину) на 1.
Работает 100% — проверено.

Psycho Tiger 04.02.2010 13:37

Цитата:

Сообщение от Himerets (Сообщение 883882)
Да не, не помогает
стоит 300)

300 FPS? КАК вам это удалось?

Код AS3:

var t:TweenMax = new TweenMax(c, 1, { y:450, onUpdate: upd } );
 
private function upd():void{
c.y=Math.round(c.y);
}


mayakwd 04.02.2010 13:51

300 fps чисто номинальное число.


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

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