Domanda

Ho un TextField all'interno di uno Sprite e voglio sempre che l'alfa di TextField sia uguale all'alfa dello sprite. Come posso iscrivermi alle modifiche apportate nello Sprite? Immagino di aver bisogno di lanciare un PropertychangeEvent in qualche modo, ma non riesco a vedere che lo sprite lo supporta immediatamente?

class TextWidget extends Sprite{  
  private var textfield:TextField;    
  public function TextWidget(){  
    textfield = new TextField();  
    textfield.alpha = this.alpha;  //does'n help  
    addChild(textField);  
??  
  this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateAlpha);  
??  
  }
  private function updateAlpha(event:PropertychangeEvent):void{  
    textfield.alpha = this.alpha;  
  }  
}  
È stato utile?

Soluzione

Un modo sarebbe creare una classe derivata dello sprite e sovrascrivere la proprietà alpha

/**
 * ...
 * @author Andrew Rea
 */
public class CustomSprite extends Sprite
{

    public static const ALPHA_CHANGED:String = "ALPHA_CHANGED";

    public function CustomSprite() 
    {

    }

    override public function get alpha():Number { return super.alpha; }

    override public function set alpha(value:Number):void 
    {
        super.alpha = value;

        dispatchEvent(new Event(CustomSprite.ALPHA_CHANGED));
    }
}

Un altro modo sarebbe semplicemente quello di impostare l'alfa del campo di testo ogni volta che viene colpito il setter alfa dello sprite genitore, come mostrato sopra solo senza l'evento.

Andrew

Altri suggerimenti

Una soluzione rapida è quella di sovrascrivere il setter alfa e usare anche il valore passato per TextField.

public override function set alpha(value:Number):void {
    super.alpha = value;
    textField.alpha = value;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top