AS3: Comment puis-je déclencher des événements lorsqu'une propriété est modifiée dans une classe supérieure?

StackOverflow https://stackoverflow.com/questions/819843

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;  
  }  
}  
Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top