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

Noro 17.11.2008 19:17

Скорость воспроизведения
 
Как изменить скорость воспроизведения заданного MovieClip-а .

iNils 17.11.2008 19:21

Код AS3:

stage.frameRate = фпс

Но действует глобально на весь ролик.

Noro 17.11.2008 19:23

мне нужно применительно одному MovieClip-у.

iNils 17.11.2008 19:29

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

Noro 17.11.2008 19:32

А по другому никак?

musat 17.11.2008 21:30

Первое, что пришло в голову:
Код AS3:

package {
    import flash.display.MovieClip;
    import flash.utils.setInterval;
    import flash.utils.clearInterval;
 
    public class MyMovieClip extends MovieClip {
        private var interval_id:uint;
        private var speed:Number;
 
        public function MyMovieClip() {
            stop();
            speed = 10;    // скорость воспроизведения в миллисекундах
            interval_id = setInterval(changeFrame,speed);
        }
 
        private function changeFrame():void {
            nextFrame();
            if (currentFrame == totalFrames) {
                clearInterval(interval_id);
            }
        }
    }
}


faust.d503 17.11.2008 23:06

musat
Это верно только если отрисовывать все кадры MyMovieClip необязательно, сцена будет перерисовываться по глобальному значению frameRate, а не каждые 10 миллисекунд.

musat 18.11.2008 00:44

Вложений: 1
faust.d503
Только что попробовал на практике, все вроде прекрасно работает. Исходник приложил.
Чтобы увидеть результат, в классе MyMovieClip.as закомментируйте
Код AS3:

speed = stage.frameRate;

и раскомментируйте следующую строчку.

faust.d503 18.11.2008 01:23

Вложений: 1
В конкретно вашем случае ошибку, о которой я говорю не видно.
Вот тоже самое с другими значениями.

Как видим вместо того, чтобы быстро писать 1, 2, 3 и т.д. он пишет 2, 9, 16.

Как я и говорил перерисовка сцены происходит по значению frameRate.
Так что надо принудительно еще и сцену перерисовывать по интервалу.

Скорость кстати тоже будет чуть помедленнее, чем указана в параметре speed, ибо это время между окончанием выполнения в функции в прошлый раз и началом в следующий. А функция тоже какое-то время(хотя чаще всего и очень маленькое) выполняется. Проверить можно поставив в любой интервал getTimer();

Noro 18.11.2008 15:27

а нет метода тобы все фреймы прокручивались?

faust.d503 18.11.2008 15:44

Я же сказал, что можно принудительно сцену перерисовывать.

flash.events.TimerEvent.updateAfterEvent()

Noro 18.11.2008 16:13

а можеш на примере показать?

faust.d503 18.11.2008 17:17

В хелпе пример есть, вместо интервала, там таймер, но лучше думаю даже им пользоваться.


Например так можно использовать updateAfterEvent()
Код AS3:

stage.addEventListener(MouseEvent.MOUSE_MOVE, function (){
        new TimerEvent("").updateAfterEvent()
        mc.x = stage.mouseX;
        mc.y = stage.mouseY;
})


Xpb7 19.11.2008 13:32

Я с помощью caurina.Tweener делал (вроде так):
Код AS3:

Tweener.addTween(myMovie, {currentFrame:20, time:1, transition:"linear"});


Цитата:

Как видим вместо того, чтобы быстро писать 1, 2, 3 и т.д. он пишет 2, 9, 16.

Как я и говорил перерисовка сцены происходит по значению frameRate.
Так что надо принудительно еще и сцену перерисовывать по интервалу.
В этом случае нужно с Timer делать и обязательно updateAfterEvent();


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

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