2011-03-27 2 views
0

Le SWF conforme ne montre pas le préchargeur tant que le SWF complet n'est pas complètement chargé. Tout hepl serait vraiment apprécié, j'ai googlé toute la nuit ne pouvait rien trouver là-dessus, au moins pour moi.Préchargeur pour SWF avec Embed bytearray

Répondre

5

Vous ne pouvez pas intégrer le ByteArray dans votre classe principale de documents, parce que les classes qui sont extraites de la classe de document seront automatiquement inclus sur le cadre 1.

La meilleure façon de précharger des actifs est d'avoir une classe Preloader séparée et classe principale. Vous voulez que votre classe Preloader à exporter sur l'image 1, et votre classe principale et actifs sur le cadre 2.

Malheureusement, cela est plus délicat qu'il devrait être, mais voici comment vous pouvez le faire: Définissez votre classe de document à Preloader. Cette classe contient votre code loaderInfo. Toutefois, lorsque vous avez terminé le chargement, n'instanciez pas directement le principal, c'est-à-dire ne faites pas var main:Main = new Main(). Cela entraînera automatiquement la compilation de Main sur l'image 1, indépendamment de ce que vous faites. Au lieu de cela, instancier indirectement, comme ceci:

nextFrame(); // you sometimes need to do this for the player to register classes exported on frame 2 
var mainClass:Class = flash.utils.getDefinitionByName("Main") as Class; 
var main:Sprite = new mainClass(); 
addChild(main); 

Cela arrêtera le compilateur de coller du principal automatiquement sur le cadre 1.

Ensuite, si vous utilisez le Flash CS3 + IDE, allez à Fichier-> Publier Paramètres-> Flash-> Paramètres ActionScript 3.0 et modifiez le paramètre "Exporter les classes sur le cadre" à l'image 2. Puis, sur l'image 2 de votre film, placez un MovieClip vide. À l'intérieur de ce MovieClip, placez une référence à votre classe principale en mettant ce code: var dummy:Main;. La raison pour laquelle vous devez faire ceci est que le compilateur sache toujours que vous utilisez Main, donc il le compilera dans le film, sinon il ne le compilera pas du tout. Vous ne voulez pas non plus le mettre dans le scénario principal, car toutes les références de code sur le scénario principal sont automatiquement placées sur l'image 1.

Dans l'EDI, un truc utile pour vérifier que les choses ont bien été exportées à leur place est de cocher "Générer un rapport de taille" dans Propriétés de publication-> Flash. Vous pouvez examiner le rapport et facilement remarquer si indésirable a exporté sur le cadre 1.

Si vous utilisez Flash Builder, FlashDevelop ou FDT, le processus est fondamentalement le même - créer Preloader séparés et les classes principales, et instancier Principalement indirectement de Preloader. Mais pour signaler le compilateur de compiler principal sur un cadre après Preloader, mettre ce metatag ci-dessus public class Main dans Main.as:

[Frame(factoryClass="Preloader")] 

FlashDevelop peut également les fichiers SWF introspect en cliquant sur le symbole + dans l'onglet Projet. Il vous montrera quels actifs ont été exportés sur quelles images. Idéalement, vous ne voulez que le strict minimum de Preloader sur l'image 1.

+0

wow! bonne astuce, mais je reçois ce message d'erreur - ArgumentError: Erreur # 2100: Le paramètre ByteArray dans Loader.loadBytes() doit avoir une longueur supérieure à 0. – kornesh

+0

Pas sûr sur ce point, pourriez-vous poster le code que vous utilisez pour créer le ByteArray? –

+0

J'ai posté le preloader entier et la classe principale .. – kornesh

0

J'ai testé la méthode de Mike dans CS4. Apparemment, le clip factice qui fait référence à Main n'a pas besoin d'être sur l'image 2, ou n'importe où sur la timeline d'ailleurs. Tant que le clip factice est défini pour l'exportation sur l'image 2, Main exportera sur l'image 2 car il est référencé dans le code du clip factice.