AS3: كيف يمكنني إطلاق الأحداث عند تغيير خاصية في فئة اوبر؟

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

سؤال

ولدي الحقل النصي داخل العفريت وأريد دائما ألفا من الحقل النصي ليكون مساويا لألفا من العفريت. كيف يمكنني الاشتراك في التغييرات التي أدخلت على العفريت؟ أعتقد أنني بحاجة إلى إطلاق بعض 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top