2010-01-07 3 views
9

Je veux charger un swf dans une application flex 4 afin d'utiliser ses classes.Adobe Flash Builder (flex4): addChild() n'est pas disponible dans cette classe.

var ldr:Loader=new Loader(); 
ldr.load(new URLRequest("file://path/to/fileswf")); 
ldr.contentLoaderInfo.addEventListener(Event.INIT, loaded); 
function loaded(evt:Event):void { addChild(ldr); } 

Je reçois l'erreur:

Error: addChild() is not available in this class. Instead, use addElement() or modify the skin, if you have one.
at spark.components.supportClasses::SkinnableComponent/addChild()[E:\dev\gumbo_beta2\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as:966]
at main/private:init/loaded()[C:\Documents and Settings\ufk\Adobe Flash Builder Beta 2\xpogames-toolkit-test\src\main.mxml:22]

Si je change addChild()-addElement(), je reçois l'erreur de compilation suivante:

1067: Implicit coercion of a value of type flash.display:Loader to an unrelated type mx.core:IVisualElement. main.mxml path/dir line 22 Flex Problem

Toute idée comment résoudre ce problème?

Répondre

2

bien dans le constructeur flash 4 version complète, il n'y a pas de this.rawChildren.

La meilleure approche pour résoudre le problème serait de convertir chaque classe nécessaire à un composant flexible et de l'utiliser sur votre application Flex:

  1. télécharger et installer le kit de composants Flex http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex_skins

  2. créer un clip

  3. Convertir en composant flex

  4. ajouter les fonctions à cette classe

un squelette pour une classe qui est attaché à un MovieClip qui est sur le point d'être converti en un composant Flex:

package { 
import mx.flash.UIMovieClip; 
import flash.text.TextField; 
import flash.events.Event; 
import flash.events.MouseEvent; 
public dynamic class challenge_screen extends UIMovieClip { 

    public function challenge_screen() { 
     super(); 
    } 
} 
} 
+0

s'étendant à un MovieClip, puis l'ajout à un composant UIComponent aussi. – ufk

0

this.rawChildren.addChild (LDR) devrait fonctionner

24

Créer un autre récipient pour placer le displayObject dans:

// container (IVisualElement) for DisplayObjects 
var container:UIComponent = new UIComponent(); 
addElement(container); 

// displayObject goes to container 
var displayO:Sprite = new Sprite(); 
container.addChild(displayO); 
+0

Fonctionne bien avec Facebook Distractor à partir du SDK ActionScript. Merci. –

+0

A fait cela dans le balisage mxml et cela a fonctionné un régal - merci! –

+0

@LaceySnr Comment avez-vous fait cela dans le balisage mxml? – Scott

1
private var _loader:SWFLoader = new SWFLoader(); 
private var _uicomponent:UIComponent = new UIComponent(); 
private function swfLoaded(event:Event):void 
{ 
Alert.show("inside swf Loaded"); 
var content:DisplayObject =_loader.content; 
_uicomponent.addChild(content); 
} 
public function loadSWF() : void 
{ 

_loader.addEventListener(Event.INIT, swfLoaded); 
_loader.load("http://intelliveysoft.com:5080/myelearn/Admin.swf"); 
addElement(_uicomponent); 
} 

essayer. Il fonctionnera

+2

Plutôt que de publier uniquement un bloc de code, veuillez * expliquer * pourquoi ce code résout le problème posé. Sans explication, ce n'est pas une réponse. –

Questions connexes