Contenu externe

Divisez l’application en plusieurs fichiers SWF.

Les périphériques mobiles ont parfois un accès limité au réseau. Pour charger rapidement le contenu, divisez l’application en plusieurs fichiers SWF. Si possible, réutilisez la logique de programmation et les actifs dans l’ensemble de l’application. Imaginons, par exemple, une application divisée en plusieurs fichiers SWF, comme illustré ci-après :

Application divisée en plusieurs fichiers SWF

Dans cet exemple, chaque fichier SWF contient sa propre copie d’un même bitmap. Il est possible d’éviter cette duplication en utilisant une bibliothèque partagée à l’exécution, comme illustré ci-dessous :

Utilisation d’une bibliothèque partagée à l’exécution

Une bibliothèque partagée à l’exécution est chargée pour que tous les autres fichiers SWF aient accès au bitmap. La classe ApplicationDomain stocke toutes les définitions de classe chargées et les met à disposition, lors de l’exécution, par le biais de la méthode getDefinition() .

Une bibliothèque partagée à l’exécution peut également contenir toute la logique de programmation. Il est possible de mettre à jour l’application tout entière sans la recompiler. Le code suivant charge une bibliothèque partagée à l’exécution et extrait la définition que contient le fichier SWF lors de l’exécution. Vous pouvez appliquer cette technique aux polices, bitmaps, sons ou toute classe ActionScript :

// Create a Loader object 
var loader:Loader = new Loader(); 
  
// Listen to the Event.COMPLETE event 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingComplete ); 
  
// Load the SWF file 
loader.load(new URLRequest("library.swf") ); 
var classDefinition:String = "Logo"; 
  
function loadingComplete(e:Event ):void 
{ 
    var objectLoaderInfo:LoaderInfo = LoaderInfo ( e.target ); 
     
    // Get a reference to the loaded SWF file application domain 
    var appDomain:ApplicationDomain = objectLoaderInfo.applicationDomain;     
  
    // Check whether the definition is available 
    if ( appDomain.hasDefinition(classDefinition) ) 
    {     
        // Extract definition 
        var importLogo:Class = Class ( appDomain.getDefinition(classDefinition) ); 
  
        // Instantiate logo 
        var instanceLogo:BitmapData = new importLogo(0,0); 
  
        // Add it to the display list 
        addChild ( new Bitmap ( instanceLogo ) ); 
    } else trace ("The class definition " +  classDefinition + " is not available."); 
}

Pour faciliter l’extraction de la définition, chargez les définitions de classe dans le domaine d’application du fichier SWF concerné :

// Create a Loader object 
var loader:Loader = new Loader(); 
  
// Listen to the Event.COMPLETE event 
loader.contentLoaderInfo.addEventListener ( Event.COMPLETE, loadingComplete ); 
  
// Load the SWF file 
loader.load ( new URLRequest ("rsl.swf"), new LoaderContext ( false, ApplicationDomain.currentDomain) ); 
var classDefinition:String = "Logo"; 
  
function loadingComplete ( e:Event ):void 
{ 
    var objectLoaderInfo:LoaderInfo = LoaderInfo ( e.target ); 
     
    // Get a reference to the current SWF file application domain 
    var appDomain:ApplicationDomain = ApplicationDomain.currentDomain;     
  
    // Check whether the definition is available 
    if (appDomain.hasDefinition( classDefinition ) ) 
    {     
        // Extract definition 
        var importLogo:Class = Class ( appDomain.getDefinition(classDefinition) ); 
  
        // Instantiate it 
        var instanceLogo:BitmapData = new importLogo(0,0); 
  
        // Add it to the display list 
        addChild ( new Bitmap ( instanceLogo ) ); 
    } else trace ("The class definition " +  classDefinition + " is not available."); 
}

Pour utiliser les classes que contient le fichier SWF chargé, il suffit maintenant d’appeler la méthode getDefinition() sur le domaine d’application actif. Vous pouvez également accéder aux classes par appel de la méthode getDefinitionByName() . Parce qu’elle charge les polices et les actifs de grande taille une seule fois, cette technique permet d’économiser de la bande passante. Les actifs ne sont jamais exportés dans d’autres fichiers SWF. Une seule restriction : il est nécessaire de tester et d’exécuter l’application par le biais du fichier loader.swf. Ce fichier charge d’abord les actifs, puis les différents fichiers SWF qui constituent l’application.