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

Zebestov 16.05.2012 17:23

Похоже на то, что tween работает на таймере, а в обработчике используется updateAfterEvent().

Добавлено через 6 минут
Код AS3:

import flash.display.Shape;
import flash.utils.Timer;
import flash.events.TimerEvent;
 
var shape:Shape = new Shape();
shape.graphics.lineStyle(1.2);
shape.graphics.drawCircle(0, 0, 50);
shape.x = 100;
shape.y = 200;
stage.addChild(shape);
 
var timer:Timer = new Timer(16);
        timer.addEventListener(TimerEvent.TIMER, onTimer);
        timer.start();
 
var step:Number = 3;
var right:Number = 480;
var left:Number = 70;
 
function onTimer(event:TimerEvent):void
{
        shape.x += step;
 
        if (shape.x >= right)
        {
                shape.x = right;
                step = -step;
        }
        else if (shape.x <= left)
        {
                shape.x = left;
                step = -step;
        }
 
        // эта заветная строчка делает все плавным
        event.updateAfterEvent();
}

Открываем Flash IDE, в первый кадр вставляем этот код, и для пущей убедительности до неприличия уменьшаем fps в настройках (например до 12).

Aquahawk 16.05.2012 17:45

Т.е. получается что они умудряются произвести несколько рендеров графики за один фрейм?

Zebestov 16.05.2012 17:51

Для того и существует этот метод :)

Котяра 16.05.2012 18:52

не стоит им злоупотреблять вообще-то.

Zebestov 16.05.2012 18:53

не стоит. но он есть ) и применили в данном примере именно его.

Aquahawk 16.05.2012 19:03

вообще интересная штука, можно получается практически иметь разный fps в разных частях флешки. Надо будет попробовать поизвращаться, что будет если сделать очень низкий fps, близкий к нулю, как себя плеер поведёт.

Zebestov 16.05.2012 19:09

Мы отвлекаемся. Данная возможность была упомянута исключительно в контексте вопроса автора.

Aquahawk 16.05.2012 19:29

ну ответ то найден, они просто обновляют графику чаще чем тикают фреймы. Движение на 4 пикселя за фрейм конечно дёргается, а если за фрейм перерисовать графику 4 раза то нормально будет. Другой вопрос в том что будет когда таких твинеров станет не 3, а 300 на экране.

Zebestov 16.05.2012 19:54

Цитата:

Сообщение от Aquahawk (Сообщение 1079894)
вопрос в том что будет когда таких твинеров станет не 3 а 300 на экране.

Код AS3:

import flash.display.Shape;
import flash.utils.Timer;
import flash.events.TimerEvent;
 
var shapeArray:Array = [];
var phaseArray:Array = [];
var ratioArray:Array = [];
 
var shape:Shape;
for (var i:int = 0; i < 300; i++)
{
        shape = new Shape();
        shape.graphics.lineStyle(2, uint(Math.random() * 0xffffff));
        shape.graphics.drawCircle(0, 0, Math.random() * 20 + 10);
        stage.addChild(shape);
 
        shapeArray.push(shape);
        phaseArray.push(Math.random() * Math.PI);
        ratioArray.push(Math.random() * 4 - 2);
}
 
var phase:Number = 0;
 
var timer:Timer = new Timer(16);
        timer.addEventListener(TimerEvent.TIMER, onTimer);
        timer.start();
 
function onTimer(event:TimerEvent):void
{
        var i:int = shapeArray.length;
        while (i--)
        {
                shape = shapeArray[i];
                shape.x = Math.sin((phase + phaseArray[i]) * ratioArray[i]) * 200 + 275;
                shape.y = Math.cos( phase + phaseArray[i])                  * 150 + 200;
        }
 
        phase += 0.025;
 
        // эта заветная строчка делает все плавным
        event.updateAfterEvent();
}


Silicium 16.05.2012 21:59

Огромное спасибо за ответ. Оказалось, вопрос был задан не напрасно)
Aquahawk, если что интересного "наизвращаешь" - сообщи обязательно.


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

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