【问题标题】:Issues with embedding objects using htmlloader使用 htmlloader 嵌入对象的问题
【发布时间】:2015-12-05 04:46:44
【问题描述】:

我正在制作一个可编辑的阶段,用户可以在其中添加图像、视频和嵌入内容。目前所有对象都驻留在一个名为 Space 的类文件中。您可以添加的所有对象都在空间内的 bounds_mc 内。这些对象称为 SpaceObjects 并由类文件 SpaceObject 处理...

现在,当我告诉我的 SpaceObject 添加嵌入时,它会执行此操作,但是..有点问题。

当我添加对象时,我无法与它完全交互。我可以使用突出显示文本时看到的相同鼠标图标突出显示它......但没有别的。我可以很好地移动 bounds_mc(它后面的空白区域)并让该对象相应地移动..但没有别的。

现在,如果我通过将舞台一直向下传递到我的 Space 类并执行 stagee.addChild(htmlLoader) 将这个对象直接添加到舞台,这个问题就解决了。

起初我以为这是因为它在一堆电影剪辑中或显示列表中的某种顺序问题……但这次测试证明了这一点。

我在三个movieclip 中有HtmlLoader,我可以很好地与embedd 交互。我试图找出可能导致这种情况的原因。我已经尝试切换 HtmlLoader 从这里到那里的位置,但我仍然遇到这个问题。

这是嵌入的

<iframe width="560" height="315" src="https://www.youtube.com/embed/Kzgjiuvpmsk" frameborder="0" allowfullscreen></iframe>

这是我的 Space 类中的一个示例,它处理来自菜单的用户输入。

                case "embeddedobject":
                trace("Embeddedobject");
                //For now, just testing a standard embedd from youtube. Dynamics later.
                var so:SpaceObject = new SpaceObject("embeddedobject", '<iframe width="560" height="315" src="https://www.youtube.com/embed/Kzgjiuvpmsk" frameborder="0" allowfullscreen></iframe>', new Rectangle(rightMouseX, rightMouseY));
                bounds_mc.addChild(so);
                //Tested with and without the eventlistener..same results
                so.addEventListener(MouseEvent.CLICK, contentClickHandler);
                spaceObjects.push(so);
                break;

这是 SpaceObject 的摘录。它处理从它的构造函数传递的参数。在这种情况下,它会生成我的嵌入。第一个论点是来源。第二个是actions(嵌入的字符串)

public function SpaceObject(source:String, actions:String, bounds:Rectangle, rotation:int=0, matrixx:Matrix = null)
{
//...
    if (source == "embeddedobject")
        {
            htmlLoader = new HTMLLoader();
            htmlLoader.placeLoadStringContentInApplicationSandbox = true;
            htmlLoader.loadString(actions);
            htmlLoader.addEventListener(Event.COMPLETE, handleHtmlLoadComplete);
        }
//...
}
    private function handleHtmlLoadComplete(e:Event):void 
    {
        trace("Html content load complete");
        htmlLoader.removeEventListener(Event.COMPLETE, handleHtmlLoadComplete);
        htmlLoader.width = htmlLoader.contentWidth;
        htmlLoader.height = htmlLoader.contentHeight;
        addChild(htmlLoader);
    }

这里是我在 pastebin 上创建的类文件的链接。所有空间对象都驻留在 Space 中。空间驻留在 SpaceContainer 中。

SpaceContainer.as

Space.as

SpaceObject.as

2015 年 12 月 5 日编辑:一个有趣的注释。单击时,e.target 作为精灵返回。当单击其他对象(无论是图像还是视频)时,它们将作为我的 SpaceObject 返回。当我将它添加到舞台时,以及当我将它添加到 bounds_mc 时,都会发生这种情况。

e.target = [object Sprite] vs e.target = [object SpaceObject]

编辑 12/5/15:看起来对象的任何更改(除了它的 x 和 y)都会禁用嵌入中的任何交互式对象并将其变成某种位图。

【问题讨论】:

    标签: actionscript-3 air embedding


    【解决方案1】:

    调整大小。

    看起来当您调整或更改任何包含嵌入的显示对象时(无论是在放置对象之前还是之后),它都会禁用嵌入。

    这一行在 main.as 中,正在构造 SpaceContainer。

    var sc:SpaceContainer = new SpaceContainer(stage);
    //resize(sc, stage.stageWidth, stage.stageHeight);
    ...
            private function resize(mc:DisplayObject, maxW:Number, maxH:Number = 0, constrainProportions:Boolean = true):void
            {
                maxH = maxH == 0 ? maxW : maxH;
                mc.width = maxW;
                mc.height = maxH;
                if (constrainProportions)
                {
                    mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多