2011-05-03 4 views
1

J'essaie de définir la largeur/hauteur d'un objet FlexSprite dans ActionScript, mais cela ne semble pas fonctionner du tout. Je suis toujours une recrue quand il s'agit d'ActionScript et je ne comprends pas pourquoi je ne peux pas définir les dimensions de cet objet. Je sais que je pourrais utiliser un UIComponent mais j'ai besoin de quelque chose de plus léger puisque je vais en ajouter des centaines.impossible de définir la largeur/hauteur sur FlexSprite

public class MyComp extends UIComponent 
{ 
    public function MyComp() 
    { 
     super(); 
    } 

    private var _sprite:FlexSprite; 

    private var _button:Button; 

    override protected function createChildren():void { 
     if (!_sprite) { 
      _sprite = new FlexSprite(); 

      _sprite.width = 200; 
      _sprite.height = 200; 
      addChild(_sprite); 
     } 
     if (!_button) { 
      _button = new Button(); 
      _button.label = "Click me"; 
      _button.width = 150; 
      _button.height = 40; 
      addChild(_button); 
     } 

     super.createChildren(); 
    } 
    override protected function measure():void { 
     measuredHeight = measuredMinHeight = 200; 
     measuredWidth = measuredMinWidth = 200; 
    } 

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { 
     super.updateDisplayList(unscaledWidth,unscaledHeight); 
     trace('dimz of _sprite', _sprite.width, _sprite.height); 
     _sprite.width = 100; // doesn't work either 
     trace('dimz of _sprite again', _sprite.width, _sprite.height); 
     trace('dimz of _button', _button.width, _button.height); 
    } 
} 

La sortie que je reçois est:

dimz of _sprite 0 0 
dimz of _sprite again 0 0 
dimz of _button 150 40 

je prévois d'ajouter d'autres objets à l'intérieur du FlexSprite et je dois définir explicitement et leurs dimensions, donc je vraiment besoin de savoir comment faire .

Répondre

2

Quelques choses qui peuvent être des questions:

  1. Sprite, comme je le comprends, est un peu comme un récipient. En soi, il n'a pas d'éléments visuels; donc rien ne sera affiché sur l'écran juste en utilisant une instance d'un FlexSprite.
  2. Vous ne positionnez pas vos éléments dans le composant; et UIComponent n'a pas de code pour positionner automatiquement ses enfants; par conséquent, le bouton apparaîtrait sur le sprite de toute façon. Vous pouvez changer cela en ajoutant du code de positionnement dans updateDisplayList(). Quelque chose comme ceci:

'

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { 
super.updateDisplayList(unscaledWidth,unscaledHeight); 
_sprite.x = 10; 
_sprite.y = 10; 
_button.x = 400; 
_button.y = 400; 
} 

Je devine - mais ne sais pas b/c source est non disponible - que le Sprite (qui FlexSprite étend) est re-dimensionnement lui-même à ses enfants; ce qui est actuellement inexistant.

+0

Votre premier point a fait la différence, j'ai ajouté un UITextField à l'intérieur du FlexSprite et cela a fonctionné, merci. – batzkoo

Questions connexes