AS3: كيف يمكنني إطلاق الأحداث عند تغيير خاصية في فئة اوبر؟
-
03-07-2019 - |
سؤال
ولدي الحقل النصي داخل العفريت وأريد دائما ألفا من الحقل النصي ليكون مساويا لألفا من العفريت. كيف يمكنني الاشتراك في التغييرات التي أدخلت على العفريت؟ أعتقد أنني بحاجة إلى إطلاق بعض PropertychangeEvent كيف، ولكن لا أستطيع أن أرى أن العفريت يدعم هذه من خارج منطقة الجزاء؟
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;
}
}
المحلول
وطريقة واحدة سيكون لإنشاء فئة مشتقة من العفريت وتجاوز الخاصية ألفا
/**
* ...
* @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));
}
}
وهناك طريقة أخرى أن يكون ببساطة لضبط ألفا حيز النص كلما ضرب واضع ألفا من شبح الأم، كما هو مبين أعلاه فقط دون الحدث.
وأندرو
نصائح أخرى
وهناك حل سريع لتجاوز واضع ألفا واستخدام القيمة التي تم تمريرها في الحقل النصي للكذلك.
public override function set alpha(value:Number):void {
super.alpha = value;
textField.alpha = value;
}
لا تنتمي إلى StackOverflow