AS3: Comment puis-je déclencher des événements lorsqu'une propriété est modifiée dans une classe supérieure?
-
03-07-2019 - |
Question
J'ai un TextField dans un sprite et je veux toujours que l'alpha du TextField soit égal à l'alpha du sprite. Comment puis-je m'abonner aux modifications apportées au Sprite? Je suppose que j’ai besoin de déclencher un PropertychangeEvent, mais je ne vois pas que le sprite prenne en charge cette fonctionnalité?
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;
}
}
La solution
Une solution serait de créer une classe dérivée de l'image-objet et de remplacer la propriété 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));
}
}
Une autre solution consisterait simplement à définir le champ de texte alpha à chaque fois que le poseur alpha de l’image-objet parent est touché, comme indiqué ci-dessus, sans événement.
Andrew
Autres conseils
Une solution rapide consiste à remplacer le paramètre de définition alpha et à utiliser également la valeur transmise pour TextField.
public override function set alpha(value:Number):void {
super.alpha = value;
textField.alpha = value;
}