1

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

但是,我刚刚添加了一个 StageWebView 来轻松添加一些基于 HTML 的内容,但我在调整大小时遇到​​了问题。如果我不调用“new Starling()”,那么当我从窗口切换到全屏时,StageWebView 实例将正确调整大小以保持相同的相对屏幕尺寸。但是,一旦我创建了 Starling 实例,StageWebView 将无法在全屏上正确调整大小;它保留最初指定的绝对尺寸。如果我不实例化 Starling,StageWebView 会完美调整大小。

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

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

4

1 回答 1

0

好的,解决了这个问题。在没有 Starling 的情况下,常规 Flash Renderer 将正确处理调整 StageWebView 类的大小,而使用 Starling,我们必须处理我们自己的调整大小事件。

因此,在我的 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 的基本尺寸,但你明白了。

于 2015-09-18T19:45:43.993 回答