AS3:使用Starling时在Event.RESIZE上调整StageWebView的大小

时间:2015-09-18 19:06:43

标签: actionscript-3 flash air starling-framework stagewebview

我正在构建混合交互AS3 / AIR应用程序。我的一些场景使用常规CPU渲染显示类(flash.display.Sprite,flash.display.MovieClip),另一种高密度图形模式使用Starling。我可以快乐地切换和使用它们,我可以在720p的窗口模式之间切换到全屏模式。

但是,我刚刚添加了一个StageWebView来轻松添加一些基于HTML的内容,而且我在调整大小时遇到​​了麻烦。如果我不打电话给#34;新的Starling()"然后,当我从窗口切换到FullScreen时,StageWebView实例将正确调整大小以保持相同的相对屏幕尺寸。但是,只要我创建Starling实例,StageWebView就无法在全屏上正确调整大小;它保留了最初指定的绝对尺寸。如果我没有实例化Starling,StageWebView会完美地调整大小。

我是否需要Event.RESIZE的事件处理程序来专门调整StageWebView对象的viewPort成员?如何从原始固定窗口尺寸中获得正确的相对尺寸? (我尝试查看舞台宽度/高度,数字奇怪地大,AIR无法正确构建新的矩形)。

对于解决此问题的任何人,我将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

好的,修好了。在没有Starling的情况下,常规Flash渲染器将正确处理StageWebView类的大小,使用Starling,我们必须处理我们自己的resize事件。

因此,在我的Sprite派生容器类的onAddedToStage方法(它本身就是Event.ADDED_TO_STAGE的处理程序)中,我添加了这个:

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进行硬编码,也不应该对viewPort的基本大小进行硬编码,但是你明白了。