0

青い空、あなたは持っているでしょう:

StaticUtil.wire( fromProperty:*, toProperty:*, usingExpression:Function );

次のように使用します。

sprite1.x = 100;
sprite2.width = 200;
StaticUtil.wire( sprite1.x, sprite2.width, function(fromX:Number,toWidth:Number):void{ toWidth = fromX * 2; });

sprite.x = 150;
trace(sprite2.width); //300;

getter/setter を動的にオーバーライドすることは、actionscript では不可能である可能性が高いことを発見しました...これが、この予備的な解決策につながりました。

public class WireableSprite extends Sprite implements IWire
{
    private var _wire:IWire;

    public function WireableSprite()
    {
        super();
    }

    public function wireTo( wireable:IWire ):void
    {
        _wire = wireable;
    }

    override public function set rotation(value:Number):void
    {
        super.rotation = value;
        if( _wire ) _wire["rotation"] = value;
    }

    override public function set scaleX(value:Number):void
    {
        super.scaleX = value;
        if( _wire ) _wire["scaleX"] = value;
    }

    override public function set scaleY(value:Number):void
    {
        super.scaleY = value;
        if( _wire ) _wire["scaleY"] = value;
    }

    override public function set x(value:Number):void
    {
        super.x = value;
        if( _wire ) _wire["x"] = value;
    }

    override public function set y(value:Number):void
    {
        super.y = value;
        if( _wire ) _wire["y"] = value;
    }

}

次のように使用します。

myWireableSprite.wireTo( myOtherSprite );

これは実際にはあまり柔軟ではありません...

私の質問は、重複したコードがあまりない場合に、これを行うための賢くてより柔軟な方法を知っている人はいますか?

4

1 に答える 1