AS3:ü berクラスでプロパティが変更されたときにイベントを発生させるにはどうすればよいですか?
-
03-07-2019 - |
質問
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;
}
所属していません StackOverflow