最近我把创造流行的节目鬼语者的互动音乐视频的一个相当艰巨的任务。我从小在项目后期,并面临着一个巨大的创作文件(有些5000+帧长)。以前的程序员(谁做在AS2一切)已经基本上嵌入的时间主时间线,并在一定的框架分两分半钟的FLV会在剪辑添加与基本的鼠标点击功能的交互会触发这些剪辑播放其它剪辑有一些闪光元素和一些视频内容。

(I创建这里可以看到的最终版本 http://www.gwghostmagic.com );

作为一个洁癖我决定重建在整个事件中AS3,共沟时间线,并在运行时间在我的元素,而加载的,而不是5000帧,使得我有一个帧并以触发动作加入事件。 ENTER_FRAME事件监听器来触发交互时加载瑞士法郎将达到某些帧。从程序员的立场来看这让一切都更清晰,更容易操纵某些行动。问题是,这件事跑了像废话。

在5000+帧版本加载更快和跑比我AS3版本平滑。这使我想到的问题,当是它更好地嵌入和运行又比逃跑事件侦听器的时间线?是Flash更适合时间线功能?

起初,我决定建立和运行过流FLV的,但是同步起来行动了。FLV是不可能的,因为FLV的是在23.975帧每秒,而我的flash动画在24帧每秒。唉我被迫编译嵌入FLV的瑞士法郎。那么.swf文件加载到包含所有功能和额外的剪辑,将根据加载瑞士法郎的帧位置发挥我的主要瑞士法郎。

有一两件事我注意到的是,Event.ENTER_FRAME似乎放慢整个该死的应用程序,因为在每一帧它有长期跑下来的if语句200行代码列表。其中,如果整个事情嵌入我可能只需要插入一个关键帧,其中交互式夹会被实例化,然后就知道做什么,立即通过的if else语句,而不是循环。

难道我搞砸了努力让这件事情整齐?它是更好地让闪光灯闪来?我应该寻找别的职业?任何输入不胜感激。

有帮助吗?

解决方案

我认为有事件触发每帧,而不是仅触发动作偶尔占性能差异。希望你可以最小化,将其通过在事件处理程序运行的代码和条件金额。

下面是一个想法我还没有测试:

var dispatch:Object = {
  f1:   function () {textBubble.text = "This is Rush Hour 2";},
  f61:  function () {textBubble.text = "";},
  f111: function () {textBubble.text = "This scene has 50 takes; "
                     +"Jackie Chan said \"Square Madison\" each time.";},
  f171: function () {textBubble.text = "";}
};
addEventListener(Event.ENTER_FRAME, function (e:event) {
  if (dispatch["f"+e.target.currentFrame] is Function) {
        dispatch["f"+e.target.currentFrame]();
  }
});

此使用如在描述的对象作为关联数组活文档。

其他提示

您可能是正确的 - 每一帧上运行的200个多行代码,放缓你失望。取而代之的是巨大的语句列表,多达分割你的帧功能,只调用那些你需要 - 这是dlamblin的想法扩展 - 这种方式,您正在运行需要对每帧的最小量的代码:

function doThisOnFrame20():void
{
    //do stuff...
}

function doThisOnFrame50():void
{
    //do stuff...
}

var frameFunctions:Array = new Array();
frameFunctions[20] = doThisOnFrame20;
frameFunctions[50] = doThisOnFrame50;

function enterFrameListener(event:Event):void
{
    if(frameFunctions[swfWithFLV.currentFrame] is Function)
    {
        frameFunctions[swfWithFLV.currentFrame]();
    }
}

addEventListener(Event.ENTER_FRAME,enterFrameListener);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top