2010-05-20 9 views
0

Nous avons un très gros fichier SWF hébergé sur un site web qui n'est qu'un dépôt de centaines de films/symboles. Nous chargeons ce fichier SWF au début avec la classe Loader, mais le client accèdera à un très petit nombre d'entre eux à ce moment.Est-il possible d'accéder à un fichier SWF distant sans avoir à le télécharger?

Est-il possible de dire au chargeur de télécharger des symboles uniquement lorsqu'ils sont nécessaires? (comme avec applicationDomain.getDefinition (...)).

Merci d'avance.

Répondre

1

Ne le pensez pas, vous devrez peut-être charger le swf entier avant d'utiliser getDefinition().

Une solution de contournement que je peux penser est de diviser le swf en plusieurs différents. Soit en nommant les swf par la classe qu'ils contiennent, soit en stockant quelques paires de noms de fichiers swf/classes contenues dans un fichier texte/xml et en utilisant cela pour charger les ressources par leur nom.

Jetez un oeil à BulkLoader, cela pourrait vous faire gagner du temps.

Si vous utilisez l'IDE Flash, j'ai écrit un script simple JSFL qui devrait rendre les choses moins fastidieux:

var doc = fl.getDocumentDOM(); 
var dir = 'file:///' + doc.path.substr(0,(doc.path.lastIndexOf('/')+1)); 
var lib = doc.library; 
var code = 'var loader : BulkLoader = new BulkLoader("assets");\n'; 
var items = lib.items; 
var iNum = items.length; 
var path; 
var name; 

fl.outputPanel.clear(); 

for(var i = 0 ; i < iNum ; i++){ 
    if(items[i].linkageExportForAS){ 
     name = items[i].linkageClassName; 
     path = dir+name+'.swf'; 
     items[i].exportSWF(path); 
     code += 'loader.add("'+(name+'.swf')+'", {id:"'+name+'"});\n'; 
    } 
} 

fl.clipCopyString(code); 
fl.outputPanel.trace('symbols exported as swfs, code is in your clipboard'); 

Tout ce qu'il fait est boucles trouvé que les éléments de la bibliothèque, et pour les symboles qui sont exporté pour actionscript, il exporte un fichier swf (où le nom de classe est utilisé comme nom de fichier) et génère un extrait de chargement en bloc.

meilleure façon d'obtenir dans Flash est la suivante:

  1. Créer une nouvelle Flash JavaScript Fichier (Fichier> Nouveau> Flash Fichier JavaScript)
  2. Collez le code
  3. Save the fichier comme ASSymbolsToFiles ou quelque chose. Il le fichier devrait par défaut dans le dossier Commandes, ce qui signifie que vous pouvez l'utiliser à travers le Commandes menu. Vous pouvez également définir un raccourci clavier, si nécessaire.

Le code généré peut ne pas être parfait, mais il vous donne une idée, et il devrait être assez lisible pour des réglages faciles.

HTH, George

0

Si ce n'est qu'un référentiel de symboles, pourquoi ne pas le diviser? Btw Je suis sûr que ce n'est pas possible, puisque pour savoir où est le symbole (en octets), vous devez télécharger le conteneur entier.

1

Vous ne pouvez pas charger des parties d'un swf, mais vous pouvez générer plusieurs swfs plus petits au lieu du plus grand. Pour que cela soit faisable, vous devez savoir comment inclure et exclure des classes dans swfs afin de pouvoir construire un ou plusieurs swfs de base qui contiennent des classes partagées, et tout un tas de swfs 'extension' qui ne contiennent que quelques classes et utilisent le classes partagées à partir des swfs de base. Cela peut être réalisé en utilisant le command-line options of mxmlc (le compilateur actionscript/mxml livré avec le flexible sdk) - Je ne sais pas si c'est possible avec l'IDE Flash.

Bien sûr, cela rendra votre chargement un peu plus complexe, mais cela économisera beaucoup de bande passante.

1

Je ne pense pas que ce soit possible. Cependant, vous pouvez utiliser JSFL pour exporter tous les symboles de votre bibliothèque afin de séparer les fichiers SWF.

Pour ce faire, enregistrez ce qui suit comme "ExportSymbols.jsfl"

//prompt user for directory to export symbols to 
var dir = fl.browseForFolderURL('Select export folder'); 

//get all the library items 
var symbols = fl.getDocumentDOM().library.items; 

for (var i=0; i<symbols.length; i++) { 
    var symbol = symbols[i]; 
    var name = symbol.name; 
    var linkageClassName = symbol.linkageClassName; 
    if (linkageClassName != "") { 
     var filename = dir + "/" + linkageClassName + ".swf"; 
     symbol.exportSWF(filename); 
     fl.trace("Exported '" + name + "' to '" + filename + "'"); 
    } 
} 

Puis, Flash choisissez Commande> Commande Exécuter ... et recherchez le fichier ExportSymbols.jsfl.

Ce script vous demandera un répertoire d'exportation, puis exportera tous les symboles dont un fichier linkageClassName est spécifié en tant que fichiers SWF distincts.

Espérons que ça aide.

Questions connexes