首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3中准确的业务流程管理事件监听器

AS3中准确的业务流程管理事件监听器
EN

Stack Overflow用户
提问于 2009-12-07 16:41:33
回答 4查看 2.8K关注 0票数 2

我正在尝试将动画同步到特定BPM的音乐中。我试过使用计时器,但在处理以毫秒为单位的小间隔时,计时器并不准确。我做了一些阅读,发现了另一种方法,它使用一个小的静默音频文件和SOUND_COMPLETE事件作为计时器。

我使用了这个代码的167ms长的声音文件。

代码语言:javascript
复制
package
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;

    public class BetterTimer extends EventDispatcher
    {
        private var silentSound:Sound;

        public function BetterTimer(silentSoundUrl:String):void {
            super();
            silentSound = new Sound( new URLRequest(silentSoundUrl) );
            silentSound.addEventListener(Event.COMPLETE, start);
        }
        public function start():void {
            this.timerFired( new Event("start") );
        }
        private function timerFired(e:Event):void {
            dispatchEvent( new Event("fire") );
            var channel:SoundChannel = silentSound.play();
            channel.addEventListener(Event.SOUND_COMPLETE, timerFired, false, 0, true);
        }
    }
}

这仍然不能保持节拍。Flash播放器能够准确处理声音吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-07 20:34:13

这是一个非常棘手的问题!有一个名为BeatTimer的小型库试图做到这一点。我自己还没有尝试过这段代码,但是如果它能像它声称的那样工作,那么它应该就是你所需要的。

票数 2
EN

Stack Overflow用户

发布于 2009-12-07 20:13:06

您也可以将新的Sound API与SampleDataEvent一起使用,基本上使用Sound.extract()手动播放您的MP3。在这种情况下,你可以预先知道延迟,甚至可以在(延迟的)事件发生时对样本进行计数。

这就是我们在AudioTool中所做的,它工作得非常好。

票数 5
EN

Stack Overflow用户

发布于 2009-12-07 16:54:47

将帧速率设置为事件间隔是帧速率的倍数可能会有所帮助(例如,167ms等于6fps;12、18、24等也可以)。

如果我理解正确的话,更好的解决方案是使用enterframe事件。不是通过计数事件来确定动画的位置,而是使用经过的时间(getTimer或声音位置)来计算它。这也将使动画在具有延迟的较慢的计算机上工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1858660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档