Che È Più Efficiente, Embeddeing un file FLV o la Compilazione di un file FLV in un file SWF e il Caricamento in modo Dinamico?

StackOverflow https://stackoverflow.com/questions/1517589

Domanda

Di recente ho preso un piuttosto arduo compito di creare un video musicale interattivo per lo spettacolo popolare Ghost Whisperer.Sono stato portato in ritardo nel progetto e si è trovato di fronte un gigante di creazione del file (circa 5000+ fotogrammi).Il precedente programmatore (che ha fatto di tutto in AS2) dovuto essenzialmente incorporato un due e mezzo minuto FLV sul tempo principale linea del tempo e in certi punti di frame aggiungere clip per l'interattività con base con il mouse fare clic su funzionalità che farebbe scattare le clip di giocare altre clip con alcuni elementi in flash e alcuni elementi video.

(l'ultima versione che ho creato può essere vista qui http://www.gwghostmagic.com);

Essendo uno smanettone ho deciso di rimettere tutto in AS3, fosso la linea del tempo del tutto e piuttosto carico nella mia elementi in fase di esecuzione, in modo che invece di 5000 fotogrammi ho avuto un fotogramma e per attivare le azioni aggiunto un Evento.ENTER_FRAME listener di eventi per attivare l'interattività quando caricato .swf avrebbe raggiunto alcuni fotogrammi.Da una programmatori punto è stato tutto molto più chiaro e più facile da manipolare certe azioni.Il problema era che la cosa che correva come una schifezza.

Il 5000+ versione con telaio caricati più velocemente e corse più dolce che la mia versione di AS3.Il che mi porta alla domanda, quando è meglio per incorporare run-off e la linea del tempo di correre fuori di un listener di eventi?È il flash più adatto per il tempo funzionalità della linea?

Inizialmente ho deciso di costruire run-off e di streaming .flv, ma la sincronizzazione delle azioni per l' .flv è stato impossibile, perché l' .flv è stato in esecuzione al 23.975 fps mentre il mio filmato flash in esecuzione a 24 fps.Purtroppo sono stato costretto a compilare un .swf flv embedded.Che .swf è stato caricato nel mio principale .swf che contiene tutte le funzioni extra di clip che vorresti giocare secondo le caricata .swf da un telaio in posizione.

Una cosa che ho notato è che l'Evento.ENTER_FRAME sembra rallentare il tutto dannatamente applicazione perché ogni fotogramma deve correre giù un elenco di istruzioni if 200 righe di codice a lungo.Per cui se il tutto è stato incorporato potrei solo bisogno di inserire un fotogramma chiave in cui interattiva clip sarebbe creata un'istanza e quindi vorrei sapere subito cosa fare, piuttosto che scorrere se else.

Ho la vite del massimo, cercando di fare le cose bella e ordinata?È meglio lasciare che sia flash flash?Devo cercare un altro lavoro?Ogni ingresso è molto apprezzato.

È stato utile?

Soluzione

Penso che con l'evento di trigger per ogni frame rispetto alla sola attivazione di azioni occasionalmente conti per la differenza di prestazioni.Speriamo che si poteva ridurre al minimo la quantità di codice e condizionali che è stato eseguito attraverso il gestore di eventi.

Ecco un'idea che non ho testato:

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]();
  }
});

Questo utilizza l' Oggetto come un Array Associativo, come descritto nel live docs.

Altri suggerimenti

Si sono probabilmente corretta, l'esecuzione di più di 200 linee di codice su ogni fotogramma è rallentare.Invece di un enorme elenco di istruzioni, dividere il frame funzioni e chiamare solo quelli di cui hai bisogno - questa è un'espansione dlamblin idea, in questo modo si esegue la più piccola quantità di codice necessario per ogni fotogramma:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top