AS3:如果在超级类中更改属性,我该如何触发事件?

时间:2009-05-04 12:18:45

标签: actionscript-3 actionscript event-handling

我在Sprite中有一个TextField,我总是希望TextField的alpha值等于sprite的alpha值。我如何订阅Sprite中所做的更改?我想我需要解决一些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;  
  }  
}  

2 个答案:

答案 0 :(得分:6)

一种方法是创建精灵的派生类并覆盖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));
    }
}

另一种方法就是在命中父精灵的alpha设置器时设置文本字段alpha,如上图所示,只是没有事件。

安德鲁

答案 1 :(得分:1)

快速解决方法是覆盖alpha setter并使用传入TextField的值。

public override function set alpha(value:Number):void {
    super.alpha = value;
    textField.alpha = value;
}