我正在制作一个可编辑的舞台,用户可以在其中添加图片,视频和嵌入内容。目前,所有对象都驻留在名为Space的类文件中。您可以添加的所有对象都位于spaces内部的bounds_mc内。这些对象称为SpaceObjects,由类文件SpaceObject ...
处理现在,当我告诉我的SpaceObject添加一个嵌入时,它会这样做,但是......这有点问题。
当我添加对象时,我无法与之完全交互。我可以使用与突出显示文本时相同的鼠标图标突出显示它。但没有别的。我可以将bounds_mc移动得很好(它后面的空白区域)并让该对象相应地移动......但没有别的。
现在,如果我将这个对象直接添加到舞台上,将舞台一直传递到我的Space类并执行stagee.addChild(htmlLoader),这个问题就解决了。
起初我以为这是因为它出现在一堆影片中,或者在显示器中出现了一些订单问题...但是这个测试证明了这一点。
我有三个动画片段中的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的摘录。它处理从它的构造函数传递的参数。在这种情况下,它生成我的嵌入。第一个参数是source。第二个是动作(嵌入的字符串)
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中。 Space驻留在SpaceContainer中。
编辑12/5/15:一个有趣的说明。单击时,e.target将作为精灵返回。当点击其他对象(无论是图像还是视频)时,它们将作为我的SpaceObject返回。当我将它添加到舞台时,以及当我将它添加到bounds_mc时,都会发生这种情况。
e.target = [object Sprite] vs e.target = [object SpaceObject]
编辑12/5/15:看起来对象的任何更改(除了x和y)都会禁用嵌入内的任何交互式对象并将其转换为某种位图。
答案 0 :(得分:0)
调整。
看起来当您调整大小或更改包含嵌入的任何显示对象时(放置对象之前或之后),它将禁用嵌入。
这一行在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;
}
}