2010-02-22 5 views
2

Je peux faire 2 choses. Chargez un swf externe et modifiez la couleur d'un objet. Quand je mets ces deux choses ensemble, ça ne marche pas. Comment changer la couleur du swf chargé? Je souhaite accéder aux noms d'instance dans les fichiers swf chargés.symbole d'accès en swf "externe" AS3

ce que je
ONT DIT Je dois emballer et mettre en place des sentiers de classe. Y a-t-il un moyen facile pour le moment?

alt text http://www.ashcraftband.com/myspace/videodnd/ball.jpg

ball.swf

"white ball on the stage named blueball" 

load.fla

//load ball.swf 
var bgLoader:Loader = new Loader(); 
bg_mc.addChild(bgLoader); 
var bgURL:URLRequest = new URLRequest("ball.swf"); 
bgLoader.load(bgURL); 

//change color of ball to blue "code works in ball.swf" 
var myColor:ColorTransform = blueball.transform.colorTransform; 
myColor.color = 0x066ccf; 
blueball.transform.colorTransform = myColor; 

ERREUR # 1120
l'accès de la propriété non définie

NOTE
fichiers swf sont tous actionscript-3. J'ai joué avec les paramètres de publication et de sécurité.

EXPERIMENT « pour comprendre l'utilisation des symboles dans les fichiers SWF externes »

Répondre

4

Il vous manque la "racine", après le swf est chargé, vous pouvez atteindre la portée de la chronologie en utilisant root. Considérez ce qui suit:

var bgLoader:Loader = new Loader(); 
bg_mc.addChild(bgLoader); 
var bgURL:URLRequest = new URLRequest("ball.swf"); 
bgLoader.load(bgURL); 
bgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); 

function onLoaded(event:Event):void 
{ 
    // use root to reach the timeline scope of the loaded swf 
    var loadedBlueball:MovieClip = event.target.content.root.blueball; 
    //change color of ball to blue "code works in ball.swf" 
    var myColor:ColorTransform = loadedBlueball.transform.colorTransform; 
    myColor.color = 0x066ccf; 
    loadedBlueball.transform.colorTransform = myColor; 

    // just adding the ball to stage, you might want to add all swf 
    addChild(loadedBlueball); 
} 

« Dans ActionScript 3 la propriété root fait référence au scénario principal du fichier SWF chargé (et non la chronologie du fichier SWF qui charge l'autre SWF). » de http://www.adobe.com/devnet/actionscript/cookbook/timeline_root.html

+0

J'ai eu ce problème dans Flash 8 avec ActionScript 2, et en utilisant myContainerClip._root l'a corrigé, merci! – Parappa

0

Son parce que le isnt swf chargé lorsque vous essayez de changer la couleur. Vous avez juste besoin d'utiliser l'événement et cela devrait fonctionner

import flash.events.*; 

[...]

var bgLoader:Loader = new Loader(); 
bgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, setMyBallColor); 
bg_mc.addChild(bgLoader); 
var bgURL:URLRequest = new URLRequest("ball.swf"); 
bgLoader.load(bgURL); 

[...]

function setMyBallColor() { 
//change color of ball to blue "code works in ball.swf" 
var myColor:ColorTransform = blueball.transform.colorTransform; // bg_mc.blueball.transform.colorTransform; ? 
myColor.color = 0x066ccf; 
blueball.transform.colorTransform = myColor; // same 
} 
+1

Loader ne dispose pas d'un événement "complet" - vous devez ajouter l'auditeur au membre contentLoaderInfo de chargeur: bgLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, setMyBallColor); – wpjmurray

+0

Oui, j'ai ajouté l'écouteur d'événement, mais j'ai eu la même erreur. J'ai pris le symbole de "ball.swf" et le mettre dans "load.swf" et il n'y a pas d'ERREURS, juste pour les balles blanches. Qu'est-ce qui manque? Je n'ai toujours pas accès au swf externe. –

+0

oops manqué que Pas sûr mais pour accéder à l'instance de blueball je pense que vous devez utiliser getChildAt (0) – RafH