2015-09-18 37 views
1

我正在構建混合交互AS3/AIR應用程序。我的一些場景使用常規的CPU渲染顯示類(flash.display.Sprite,flash.display.MovieClip),另一個高密度圖形模式使用Starling。我可以切換和愉快地使用這些,我可以在720p的窗口模式和全屏模式之間切換。AS3:使用Starling在Event.RESIZE上調整StageWebView的尺寸

但是,我只是添加了一個StageWebView來輕鬆添加一些基於HTML的內容,並且遇到了調整大小的麻煩。如果我沒有調用「new Starling()」,那麼當我從窗口切換到FullScreen時,StageWebView實例將正確調整大小以保持相同的相對屏幕尺寸。但是,一旦我創建Starling實例,StageWebView將無法在全屏上正確調整大小;它保留了最初指定的絕對尺寸。如果我沒有實例化Starling,則StageWebView會完美調整大小。

我是否需要Event.RESIZE的事件處理程序來專門調整StageWebView對象的viewPort成員?如何從原始固定窗口大小獲得正確的相對尺寸? (我試着看舞臺的寬度/高度,數字奇怪的大,AIR未能正確構建新的Rectangle)。

我將不勝感激任何解決此問題的任何示例代碼。謝謝。

+1

它看起來像是我想stage.stageWidth(和高度,分別)時從stage.width錯誤地計算寬度。 是的,解決方案是手動處理調整大小,請參閱下面的答案。 –

+0

你自己發佈的問題和答案中有很多錯誤的陳述。我的建議是刪除整個事情,因爲它無法幫助任何人。當然,StageWebView不會像你聲稱的那樣調整自身的大小,甚至在Flash中也沒有機制可以自動調整StageWebView的大小。只有編碼器可以通過將矩形對象傳遞給StageWebView視口來提供大小。我們現在只能得出結論:您的代碼和只有您的代碼正在創建問題,而您的答案只能解決您自己的代碼。 – BotMaster

+0

如果應用程序轉換爲FULL_SCREEN_INTERACTIVE,則添加到沒有Starling的項目的StageWebView將相對於舞臺調整其大小。我有工作代碼證明了這一點。 –

回答

0

好的,解決這個問題。在沒有Starling的情況下,經常使用Flash Renderer將正確調整StageWebView類的大小,使用Starling時,我們必須處理我們自己的調整大小事件。

因此,在我的Sprite的派生容器類的onAddedToStage方法(其本身是Event.ADDED_TO_STAGE一個處理程序),I補充一點:

的addEventListener(Event.RESIZE,在onResize);

再有這樣的功能:

private function onResize(e:Event):void 
{ 
    var origH:Number = 720; 
    var origW:Number = 1280; 

    var baseRect:Rectangle = new Rectangle(40,40, 1200, 640); 

    var newX:Number = baseRect.x * stage.stageWidth/origW; 
    var newY:Number = baseRect.y * stage.stageHeight/origH; 

    var newW:Number = baseRect.width * stage.stageWidth/origW; 
    var newH:Number = baseRect.height * stage.stageHeight/origH; 

    m_webView.viewPort = new Rectangle(newX,newY,newW,newH); 
} 

當然,我不應該硬編碼的視口的720和1280,也不是基地規模,但你的想法。