2010-04-21 3 views
0

J'essaie d'attacher une partie de ma classe ActionScript, héritée de Sprite, à mon application Flex en l'attachant à un composant UIComponent, puis d'ajouter UIComponent à un panneau. Cependant, la taille de ma classe Sprite semble être plus grande que celle du panneau. Donc, j'essaye de le redimensionner en utilisant la propriété DisplayObject.scale, mais j'ai besoin de connaître la taille de mon conteneur. Puisque j'essaie de rendre mon code réutilisable, je suppose que je devrais laisser ma classe Sprite gérer le redimensionnement en l'obtenant via sa propriété parent (disons, je peux le redimensionner par jeuFlex: comment redimensionner DisplayObject pour s'adapter à un panneau dans l'application Flex

this.scaleX = this.parent. largeur/this.largeur ou quelque chose comme ça)

Cependant, mon parent de la classe Sprite, qui est le UIComponent, a une largeur/hauteur de 0. donc, ma question est: 1) y at-il une meilleure façon de redimensionner Classe DisplayObject pour adapter son conteneur lorsqu'il est attaché à l'objet Flex? 2) Si vous savez, pourquoi la taille de mon UIComponent reste 0 et mon DisplayObject apparaît toujours à sa taille maximale?

Voici mon code, en utilisant Flash Builder 4:

 
private var loader:Loader = new Loader(); 
private function testLoader():void { 
    var urlRequest:URLRequest = new URLRequest("http://localhost/welcome.png"); 
    loader.load(urlRequest); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderLoadComplete); 
} 

private function onLoaderLoadComplete(e:Event):void { 
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoaderLoadComplete); 
    var ui : UIComponent = new UIComponent(); 
    ui.addChild(loader); 
    panelTest.addElement(ui); 
    trace("ui.width = " + ui.width); 
    trace("ui.height = " + ui.height); 
    trace("loader.width = " + loader.width); 
    trace("loader.height = " + loader.height); 
    trace("panelTest.width = " + panelTest.width); 
    trace("panelTest.height = " + panelTest.height); 
} 



Et ceci est le résultat lorsqu'il est exécuté:

 
ui.width = 0 
ui.height = 0 
loader.width = 571 
loader.height = 411 
panelTest.width = 480 
panelTest.height = 320 

Répondre

0
  1. Je pense qu'il est l'inverse: le parent doit définir la taille de l'élément enfant lors du rendu. Vous pouvez remplacer la méthode updateDisplayList (unscaledWidth: Number, unscaledHeight: Number) pour définir la taille de votre enfant loader. Voir Advanced Visual Components in ActionScript.
  2. Je suppose que la taille de votre ui n'est pas vraiment 0. La taille est mise à jour plus tard, après la mise en page et le processus de rendu. Vous devez donc attendre la fin de la mise en page après avoir ajouté un composant à la scène.
+0

J'ai modifié le code pour tracer après ui a été ajouté à la scène, comme celui-ci: fonction privée onLoaderLoadComplete (e: Event): void { loader.contentLoaderInfo.removeEventListener (Event.COMPLETE, onLoaderLoadComplete); \t \t \t ui.addChild (chargeur); ui.addEventListener (Event.ADDED_TO_STAGE, onUILoadComplete); panelTest.addElement (ui); } – ohm

+0

fonction privée onUILoadComplete (e: Evénement): void { ui.removeEventListener (Event.ADDED_TO_STAGE, onUILoadComplete); trace ("ui.width =" + ui.width); trace ("ui.height =" + ui.height); trace ("loader.width =" + loader.width); trace ("loader.height =" + loader.height); trace ("panelTest.width =" + panelTest.width); trace ("panelTest.height =" + panelTest.la taille); } Le résultat reste le même – ohm

0

A propos du reste 0, est un connu (grrr) problème malheureusement: http://www.mail-archive.com/[email protected]/msg39998.html

Vous pouvez essayer d'y accéder d'une manière piraté (en utilisant l'espace de noms mx_internal): get width of dynamically created custom uicomponent

Ajout du sprite directement au panneau peut également être utile. Cela peut être fait en ajoutant le chargeur aux rawChildren du panneau: http://www.actionscript.org/forums/showthread.php3?p=728034

Profitez.

Questions connexes