2009-06-17 8 views
0

Nous développons un petit gamet Flash pour un de nos clients européens, qui nous demande de développer notre jeu Flash de manière à pouvoir charger notre jeu SWF dans leur environnement. Projet ActionScript 3, dynamiquement. Fondamentalement, ils ont une console qui va charger de nombreux autres jeux Flash, parmi les nôtres, selon le bouton sur lequel le joueur appuie sur un écran "Choisissez votre jeu". Fondamentalement, nous avons un projet FLA que nous sommes en train de créer dans Flash Professional CS4 et tout est essentiellement un jeu Flash simple. Lorsque nous testons le jeu via Ctrl + Entrée ou exécutez le fichier SWF compilé en double-cliquant dessus, tout fonctionne bien, le jeu s'exécute parfaitement et tout le monde est un lapin heureux.Chargement d'un fichier SWF dans un projet ActionScript 3 (Flex Builder)

Ce que nous devons saisir est de charger notre SWF dans nos clients projet AS3, qui est essentiellement un projet ActionScript 3 externe créé dans Flex Builder 3. Le client nous a affiché le code suivant pour charger le fichier SWF:

var myGame:FunkyChickenGame = new FunkyChickenGame(); 
addChild(myGame); 

... qui est exécuté dans le constructeur de l'application ActionScript 3 de l'application cliente, ou peut-être un gestionnaire d'événement pour un bouton activé dans l'écran "Choisissez votre jeu".

Nous avons essayé de créer un projet AS3 vierge dans Flex Builder et essayé de charger le fichier SWF conformément à mon extrait ci-dessus. Toutes nos traces dans la classe de document SWF externe s'affichent comme prévu dans la vue de la console Flex Builder, de sorte que le code fonctionne parfaitement. Le problème que nous rencontrons est que malgré l'appel de addChild (myGame) ... nous ne voyons aucun graphique, juste la couleur d'arrière-plan par défaut du projet encapsulant AS3. Notez cependant, lorsque nous exécutons le fichier SWF en double-cliquant sur le fichier Game.swf dans Windows, tout s'exécute parfaitement, le jeu fonctionne sans faille et défauts.

Toute aide sur ce sujet serait grandement appréciée. Merci d'avance.

+0

Vous n'avez pas d'erreur? Pour moi, cela ressemble à une référence de scène nulle dans votre Game.swf. Pouvez-vous penser à n'importe quel endroit où vous pourriez essayer de parler à la scène avant qu'une référence d'étape existe? La référence d'étape n'existera pas jusqu'à ce que addChild (myGame); s'exécute. –

+0

Avez-vous un écouteur d'événement pour un événement Event.ADDED_TO_STAGE dans le constructeur de FunkyChickenGame? Cela vous permettra d'écouter quand votre jeu est ajouté à la scène (via la méthode addChild() de votre client), puis vous pouvez initialiser votre jeu lorsque cet événement est déclenché. – wpjmurray

Répondre

1

Ce que vous devez utiliser est une instance de la classe Loader, comme ceci:

var loader:Loader = new Loader(); 

// you'll need to write a method named onLoaded to capture the COMPLETE event 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); 

loader.load(new URLRequest("game.swf")); 
addChild(loader); 
+0

Merci Branden. L'événement onLoaded, serait-il à son tour vide? Donc en d'autres termes, puis-je faire ceci: loader.contentLoaderInfo.addEventListener (Event.COMPLETE, function(): void()? –

+0

Bien sûr, mais si vous ne voulez pas suivre l'événement, il n'y a pas besoin de cette ligne en premier lieu. Vous en avez seulement besoin si vous voulez suivre quand le chargement est terminé. –

0

Création d'une instance d'une classe est aussi le salaire qu'il peut obtenir. Votre client a une façon amusante de publier des références.

Toutefois, FunkyChickenGame peut être une classe créée par le client qui peut lancer votre partie. Peut-être que les jeux sont intégrés dans leur application flash, mais cela signifierait un long temps de chargement. Si en effet de nombreux jeux sont "chargés" de cette façon. Mon conseil serait que vous n'utilisiez pas les propriétés stage, root ou autres qui pourraient être liées à l'application principale au lieu de votre jeu, et laisser le client décider comment il aimerait le charger.

Questions connexes