Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Timer или channel.position? (http://www.flasher.ru/forum/showthread.php?t=141472)

ZGG 25.06.2010 17:51

Timer или channel.position?
 
Здравствуйте уважаемые флеш кодеры!

Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.media.*;
        import flash.net.*;
        import flash.utils.*;
        public class Main extends Sprite
        {
                private var timer:Timer,sec:int,currentPos:int,sound:Sound,channel:SoundChannel,totalDiffer:int
 
                public function Main()
                {
                        timer = new Timer(1000, 0)
                        sound = new Sound(new URLRequest('Muzykant.mp3'))
                        timer.start()
                        channel = sound.play();
                        timer.addEventListener(TimerEvent.TIMER, listener)
                }
                private function listener(e:TimerEvent):void
                {
                        var cp:int = channel.position
                        var dif:int = cp - currentPos - 1000
                        totalDiffer +=Math.abs(dif)
                        trace((++sec)+' sec. Current channel.position: '+cp+' ms, differs: '+dif+' ms. Total differ: '+totalDiffer+' ms.')
                        currentPos=cp
                }
        }
}

Вывод:
Код:

1 sec. Current channel.position: 743 ms, differs: -257 ms. Total differ: 257 ms.
2 sec. Current channel.position: 1764 ms, differs: 21 ms. Total differ: 278 ms.
3 sec. Current channel.position: 2786 ms, differs: 22 ms. Total differ: 300 ms.
4 sec. Current channel.position: 3808 ms, differs: 22 ms. Total differ: 322 ms.
5 sec. Current channel.position: 4829 ms, differs: 21 ms. Total differ: 343 ms.
6 sec. Current channel.position: 5851 ms, differs: 22 ms. Total differ: 365 ms.
7 sec. Current channel.position: 6873 ms, differs: 22 ms. Total differ: 387 ms.
8 sec. Current channel.position: 7894 ms, differs: 21 ms. Total differ: 408 ms.
9 sec. Current channel.position: 8870 ms, differs: -24 ms. Total differ: 432 ms.
10 sec. Current channel.position: 9891 ms, differs: 21 ms. Total differ: 453 ms.
...

Почему происходит такие задержкы/опережения? Это погрешность таймера или так флеш проигрывает звук?

VVall 25.06.2010 18:10

Погрешность таймера есть совершенно точно, и вполне вероятно, что позиция проигрывания возвращается также довольно условная (т.к. звук играется блоками некоторого размера).

ZGG 26.06.2010 00:24

кстати, тоже самое происходит и с getTimer(). Погрешности намного больше. А вот с классом Date - все гуд, хотя насколько я знаю таймер построен на Date.

От блин, целый проект повалился из за этого. :((


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

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