【问题标题】:Unable to have Flash Component (SWC) access the library in live preview无法让 Flash 组件 (SWC) 访问实时预览中的库
【发布时间】:2012-07-04 20:49:29
【问题描述】:

我正在构建一组 Flash 组件,这些组件能够将组件的外观替换为库中的另一个组件。

目前,我可以在运行应用程序后访问库,但不能在实时预览期间访问,我想知道组件在实时预览模式下运行时是否可以访问库(在您可以在舞台周围拖动组件并在“组件参数”窗口中更改其属性)

这是一个简化的代码,它只是查看是否存在指定名称的符号,然后将其实例化并将其添加为子项。

package 
{
    import fl.core.UIComponent;
    import flash.display.MovieClip;
    import flash.system.ApplicationDomain;

    /**
     * ...
     * @author Roy Lazarovich
     */
    public class CompTest extends UIComponent 
    {
        private var customfile  :String;

        public function CompTest()
        {

        }

        override protected function configUI():void
        {

        }

        override protected function draw():void
        {
            super.draw();
        }

        private function setCustomFile():void
        {
            if (ApplicationDomain.currentDomain.hasDefinition(customfile))
            {
                var c:Class = Class(ApplicationDomain.currentDomain.getDefinition(customfile));
                var mc:MovieClip = new c();
                addChild(mc);
            }
        }

        [Inspectable(name = "_Custom File", defaultValue = "")]
        public function set _customfile(value:String):void
        {
            customfile = value;
            setCustomFile();

            drawNow();
        }

    }

}

谢谢!

【问题讨论】:

  • 您的路径中是否包含库?
  • 您的意思是在组件的路径中包含客户端库的位置吗?我不确定这是否完全可行——我们有几百个使用我们组件的客户端库。还是您的意思是在 client .fla 中包含客户端路径??

标签: actionscript-3 flash actionscript components


【解决方案1】:

这在 LivePreview 中对我有用,只要我在 configUI 中应用它而不是绘制:

public class EditableBitmap extends UIComponent 
{
    protected var placeholder:String = "None";
    protected var bitmap:Bitmap;
    protected var scale:Number = 1;

    [Inspectable(name = "Placeholder", type = String, defaultValue="None")]
    public function set Placeholder($value:String):void 
    { 
        placeholder = $value;
        configUI();
    }
    public function get Placeholder():String { return placeholder; }

    public function EditableBitmap() 
    {
        //Console.Debug("NEW EditableBitmap");
        super();
    }

    override protected function configUI():void 
    {
        //Console.Debug("EditableBitmap configUI: " + width);
        if (!isNaN(width))
        {
            wDim = width;
            hDim = height;
            graphics.clear();
            graphics.beginFill(0x000000, 0.1);
            graphics.drawRect(0, 0, wDim, hDim);
        }
        if (placeholder != "None" && placeholder != "")
        {
            var asset:Class = getDefinitionByName(placeholder) as Class;
            var data:BitmapData = new asset() as BitmapData;
            bitmap = new Bitmap(data);
        }
        super.configUI();
    }

    override protected function draw():void 
    {
        if (bitmap)
        {
            addChild(bitmap);
            bitmap.x = off_x * scale;
            bitmap.y = off_y * scale;
            bitmap.scaleX = bitmap.scaleY = scale;
        } 
    }
}

注意:当我在编辑组件的 FLA 上工作时,位图仅从库中不一致地显示。有时有效,有时无效。但是,当我导出 SWC,然后将组件导入另一部电影时,它每次都能正常工作,无论是在 LivePreview 中还是在运行时。

更新 除非符号已经嵌入到组件中,否则这似乎在 CS6 中不起作用文件。这不起作用,但它确实向我指出了如何做到这一点:

所以,这有点费力,但您可以通过以下方式解决这个问题:

1) 为组件 SWC 中的每个属性创建一个虚拟资产。 2) 在部署组件的文件中使用自定义类覆盖它

...所有这些都可能比它的价值更麻烦,但应该提供解决问题的方法。

【讨论】:

  • 一旦我能够对此进行测试,我将报告我的发现。谢谢您的发布。当涉及到字体时,我的测试代码(看起来很相似,但与你的略有不同)可能会失败。
  • 让我知道你发现了什么 - 更多细节可能会缩小到另一个解决方案。 LivePreview 可能有点不稳定,但根据我的经验,通常仅在您创作组件时才使用,而不是在将其发布到 swc 后。
  • 我正在尝试复制您在此处所做的工作。我的组件不是从库存的 UIComponent 或 UIObject 继承的,因为它们需要在控制台上运行,而这些对它来说有点重。当然,我需要的是字体,但这是行不通的。我正在尝试找出不同/缺失的内容。我的 UIComponent 和 UIObject 版本没有 configUI 函数。你的基于标准的 UIComponent 吗? AS2 还是 AS3?
  • 没关系,我看错了。我在看 mx.core 而不是 fl.core。会回来报告的。
  • 我尝试使用与您相同的代码复制您的示例。我已将 png 添加到我的目标库并使用有效标识符将其导出为 AS,我已添加 SWC 组件,舞台上组件的一个实例,并将占位符设置为 png 的标识符。然而什么也没有出现。我正在使用CS6,我不知道这是否重要。希望不会,因为我认为我们无法访问任何其他版本。
【解决方案2】:

我不完全确定您已经尝试过什么来解决这种情况。但希望这可能会有所帮助。

右键单击库中的 MovieClip,选择 Linkage 并为其命名,即。我的东西。

在您的代码中,

newMyThing = new MyThing();
this.addChild(newMyThing);
trace("tada!");

希望能帮助您或让您更接近解决方案。

【讨论】:

  • “MyThing”在发布时未知,它被设置为组件的属性。充其量,你会使用getDefinitionByName,但是它失败了。使用该组件发布 .fla 时,它工作正常。问题在于组件的实时预览无法从 .fla 的库中实例化到 IDE 舞台上的实时预览中。
猜你喜欢
  • 2010-10-23
  • 2010-11-12
  • 2011-01-13
  • 2010-12-04
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多