AS3:ü berクラスでプロパティが変更されたときにイベントを発生させるにはどうすればよいですか?

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

質問

Sprite内にTextFieldがあり、常にTextFieldのアルファがスプライトのアルファに等しくなるようにします。スプライトで行われた変更を購読するにはどうすればよいですか?どうにかして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;  
  }  
}  
役に立ちましたか?

解決

1つの方法は、スプライトの派生クラスを作成し、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));
    }
}

もう1つの方法は、イベントなしで上記のように、親スプライトのアルファセッターがヒットするたびにテキストフィールドアルファを設定することです。

アンドリュー

他のヒント

簡単な修正方法は、アルファセッターをオーバーライドし、TextFieldにも渡された値を使用することです。

public override function set alpha(value:Number):void {
    super.alpha = value;
    textField.alpha = value;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top