Ce qui est plus efficace, un Embeddeing FLV ou FLV à un Compiler un fichier SWF et charger dynamiquement?

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

Question

Récemment, je pris une tâche plutôt ardue de créer une vidéo musicale interactive pour le Whisperer populaire émission Ghost. J'ai été élevé à la fin du projet et a été confronté à un fichier de création géant (certains cadres 5000+ long). Le programmeur précédent (qui a fait tout AS2) avait essentiellement intégré un FLV deux et demi-minute sur la ligne principale de temps en temps et à certains points de cadre ajouterait des clips pour l'interactivité avec des fonctionnalités de clic de souris de base qui déclencherait ces clips à jouer d'autres clips avec quelques éléments flash et certains éléments vidéo.

(la version finale, j'ai créé peut être vu ici http://www.gwghostmagic.com );

Être un maniaque de la propreté, j'ai décidé de reconstruire le tout dans AS3, fossé la ligne de temps tout à fait et plutôt charger dans mes éléments au moment de l'exécution de sorte qu'au lieu de 5000 cadres que j'avais une image et pour déclencher les actions d'ajouter un événement. écouteur d'événement ENTER_FRAME pour déclencher l'interactivité lorsque le .swf chargé atteindrait certains cadres. D'un programmeurs tiennent point, il a fait tout beaucoup plus clair et plus facile à manipuler certaines actions. Le problème était, la chose a couru comme de la merde.

La version du cadre 5000+ chargé plus rapide et a couru plus lisse que ma version AS3. Ce qui me amène à la question, quand est-il préférable d'intégrer et exécuter sur la ligne de temps que de courir hors d'un écouteur d'événement? Flash est mieux adapté pour la fonctionnalité de ligne de temps?

Dans un premier temps, j'ai décidé de construire et de s'enfuir d'un flv en streaming, mais la synchronisation les actions à l'.flv était impossible parce que la .flv était en cours d'exécution à 23.975 fps alors que mon film flash est en cours d'exécution à 24 images par seconde. Hélas j'ai été obligé de compiler un swf avec le flv intégré. Ce .swf a ensuite été chargé dans mon principal .swf qui contenait toutes les fonctions et des clips supplémentaires qui jouent en fonction de la position du cadre de l'.swf chargé.

Une chose que j'ai remarqué est que le Event.ENTER_FRAME semble ralentir l'ensemble de l'application sacrément vers le bas, car à chaque image, il doit exécuter une liste d'instructions if 200 lignes de code long. Si la chose dans laquelle tout a été intégré que je pourrais seulement besoin d'insérer une image clé où serait instancié le clip interactif et connaîtrait immédiatement ce qu'il faut faire, plutôt que de faire défiler si les déclarations d'autre.

Ai-je bousiller essayer de faire de belles choses et bien rangé? Est-il préférable de laisser le flash être flash? Dois-je chercher une autre carrière? Toute entrée est très apprécié.

Était-ce utile?

La solution

Je pense que d'avoir le déclencheur d'événement chaque image contre seulement déclencher des actions représente parfois la différence de performance. Nous espérons que vous pouvez réduire la quantité de code et conditionals qui a été exécuté par dans le gestionnaire d'événements.

Voici une idée que je ne l'ai pas testé:

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

utilise le objet comme un tableau Associatif comme décrit dans les docs en direct.

Autres conseils

Vous avez probablement raison - en cours d'exécution 200+ lignes de code sur chaque image qui vous ralentit. Au lieu d'une liste énorme de déclarations, diviser vos fonctions de cadre et appeler uniquement ceux dont vous avez besoin - c'est une extension sur l'idée de dlamblin - de cette façon que vous utilisez la plus petite quantité de code nécessaire pour chaque trame:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top