在 actionscript 中,有没有一种聪明的方法将特定的变量连接在一起,这样当一个变量发生变化时,它会将其更改发送到线路上?



蓝天,你会有:

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 );

实际上不是很灵活…

我的问题是,有没有人知道一个聪明和更灵活的方法来做到这一点,我没有这么多重复的代码?

仔细看看

BindingUtils

ChangeWatcher

如果我理解正确的话,这就是你要找的。

最新更新