【问题标题】:Adding an object reference to a component from the properties window从属性窗口添加对组件的对象引用
【发布时间】:2012-08-28 16:54:22
【问题描述】:

有没有办法直接从属性/组件参数窗口将对象引用传递给组件?使用 [Inspectible] 标签只允许我输入字符串而不是实际的对象引用。

例如,我有一个名为“knob”的自定义组件,它应该包含对它打开的舞台上的一扇门的引用。我知道这可以通过“knob.door = someDoor;”在代码中轻松完成但由于场景中有很多对象,我希望能通过属性窗口直观地做到这一点。

【问题讨论】:

    标签: actionscript-3 flash properties components flash-cs5


    【解决方案1】:

    我认为你做不到。你最好的办法是传入一个字符串标识符(如果你的剪辑嵌套很深,可能是一个完整的点分隔路径),然后在你的自定义组件中实现代码以按名称查找该项目。

    我有一个自定义组件,它相对于水平和垂直的前任组件进行布局,所以我这样做:

    protected var horizontalPredecessor:String = "";
    
    [Inspectable(name = "HorizontalPredecessor", type = String, defaultValue="")]
    public function set HorizontalPredecessor($value:String):void 
    { 
        horizontalPredecessor = $value;
        drawNow();
    }
    
    override protected function draw():void
    {
        if (parent)
        {
            if (horizontalPredecessor != "")
            {
                var hp:DisplayObject = parent.getChildByName(horizontalPredecessor);
                if (hp)
                {
                    x = hp.y + hp.height + horizontalSpacing;
                }
            }
        }
    }
    

    ...这很容易,因为所有这些组件共享同一个父级。

    或者,如果只有一扇门,您可以将其设为单例,并为其提供静态引用,如下所示:

    public class Door
    {
         private static var _singleton:Door;
    
         public static function get Singleton():Door
         {
             if(!_door) _door = new Door();
             return _door;
         }
    
    }
    

    然后你的句柄可以只引用Door.Singleton,你不必担心传入任何东西。或者,你可以在 Door 类中有一个门的静态数组,并给你的句柄一个索引号来链接它到一个特定的门。

    【讨论】:

    • 谢谢!我完全忘记了 getChildByName 方法。这样我只能插入实例名称,因为它们都应该是唯一的,所以应该没有问题。
    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多