АС3:Как я могу запускать события при изменении свойства в классе über?
-
03-07-2019 - |
Вопрос
У меня есть текстовое поле внутри спрайта, и я всегда хочу, чтобы альфа текстового поля была равна альфа спрайта.Как я могу подписаться на изменения, внесенные в Спрайт?Я предполагаю, что мне нужно каким-то образом запустить PropertyChangeEvent, но я не вижу, что sprite поддерживает это из коробки?
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;
}
}
Решение
Одним из способов было бы создать производный класс sprite и переопределить свойство 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));
}
}
Другим способом было бы просто установить альфа-значение текстового поля всякий раз, когда задается альфа-параметр родительского спрайта, как показано выше, только без события.
Эндрю
Другие советы
Быстрое решение состоит в том, чтобы переопределить альфа-установщик и использовать значение, переданное также для TextField.
public override function set alpha(value:Number):void {
super.alpha = value;
textField.alpha = value;
}
Не связан с StackOverflow