2015-12-05 70 views
0

我正在製作一個可編輯的階段,用戶可以添加圖像,視頻和嵌入內容。目前所有對象都駐留在一個名爲Space的類文件中。所有可以添加的對象都在空間內的bounds_mc內。這些對象被稱爲SpaceObjects,並由類文件SpaceObject處理...使用htmlloader嵌入對象的問題

現在,當我告訴我的SpaceObject添加一個嵌入時,它會這樣做,但是有一點問題。

enter image description here

當我添加的對象,我不能準確地與它進行交互。我可以使用與突出顯示文本時所看到的相同的鼠標圖標來突出顯示它..但沒有其他。我可以將bounds_mc移動到正確的位置(它後面的空白區域),並讓該對象相應移動..但是沒有其他任何東西。

現在,如果我通過將舞臺一直傳遞到Space類並執行stagee.addChild(htmlLoader),將此對象直接添加到舞臺上,則會解決此問題。

起初我以爲這是因爲它是在一串動畫片或顯示列表中的某種訂單問題......但這被這個testrun反駁。

enter image description here

我有三個影片剪輯的內部HTMLLoader對象,我能夠與使嵌入蠻好interract。我試圖找出可能導致這種情況的原因。我試着切換HtmlLoader從這裏到那裏,但我仍然遇到這個問題。

這裏是使嵌入

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

下面是從我的空間類的樣本從菜單處理用戶的輸入。

   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的摘錄。它處理從它的構造函數傳遞來的參數。在這種情況下,它生成我的嵌入。第一個參數是源代碼。二是行動(在使嵌入的字符串)

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

這裏是鏈接到參與,我已經在引擎收錄..所有的空間物體駐留在太空進行的類文件。空間駐留在SpaceContainer中。

SpaceContainer.as

Space.as

SpaceObject.as

編輯15年12月5日:一個有趣的註釋。點擊時,e.target作爲精靈返回。當其他對象被點擊(無論是圖像還是視頻)時,它們將作爲我的SpaceObject返回。當我將它添加到舞臺上並將其添加到bounds_mc時,會發生這種情況。

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

編輯15年12月5日:看起來像對象(除了其x和y)的任何改動禁用嵌入內部的任何互動對象,並把它變成某種位圖。

回答

0

調整大小。

它看起來像當您調整或更改任何包含嵌入的displayobjects時(在放置對象之前或之後)它將禁用嵌入。

這條線位於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; 
      } 
     }