AS3:使用 Starling 时在 Event.RESIZE 上调整 StageWebView 的大小
AS3: Resize StageWebView on Event.RESIZE when using Starling
我正在构建一个混合交互 AS3/AIR 应用程序。我的一些场景使用常规 CPU 渲染显示 类 (flash.display.Sprite, flash.display.MovieClip),另一种高密度图形模式使用 Starling。我可以愉快地切换和使用它们,我可以在 720p 的窗口模式和全屏模式之间切换就好了。
但是,我刚刚添加了一个 StageWebView 以轻松添加一些基于 HTML 的内容,但我在调整大小方面遇到了问题。如果我不调用 "new Starling()",那么当我从窗口化切换到全屏时,StageWebView 实例将正确调整大小以保持相同的相对屏幕尺寸。但是,一旦我创建了一个 Starling 实例,StageWebView 就无法在全屏上正确调整大小;它保留了最初指定的绝对尺寸。如果我不实例化 Starling,StageWebView 会完美调整大小。
我是否需要 Event.RESIZE 的事件处理程序来专门调整 StageWebView 对象的 viewPort 成员?如何从原始固定窗口大小获得正确的相对尺寸? (我试着查看阶段 width/height,但数字出奇地大,AIR 无法正确构建新的矩形)。
对于解决此问题的任何人,我将不胜感激。谢谢
好的,解决了这个问题。在没有 Starling 的情况下,常规 Flash 渲染器将正确调整 StageWebView 的大小 class,而使用 Starling,我们必须处理自己的调整大小事件。
因此,在我的 Sprite 派生容器 class 的 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 的基本大小,但你明白了。
我正在构建一个混合交互 AS3/AIR 应用程序。我的一些场景使用常规 CPU 渲染显示 类 (flash.display.Sprite, flash.display.MovieClip),另一种高密度图形模式使用 Starling。我可以愉快地切换和使用它们,我可以在 720p 的窗口模式和全屏模式之间切换就好了。
但是,我刚刚添加了一个 StageWebView 以轻松添加一些基于 HTML 的内容,但我在调整大小方面遇到了问题。如果我不调用 "new Starling()",那么当我从窗口化切换到全屏时,StageWebView 实例将正确调整大小以保持相同的相对屏幕尺寸。但是,一旦我创建了一个 Starling 实例,StageWebView 就无法在全屏上正确调整大小;它保留了最初指定的绝对尺寸。如果我不实例化 Starling,StageWebView 会完美调整大小。
我是否需要 Event.RESIZE 的事件处理程序来专门调整 StageWebView 对象的 viewPort 成员?如何从原始固定窗口大小获得正确的相对尺寸? (我试着查看阶段 width/height,但数字出奇地大,AIR 无法正确构建新的矩形)。
对于解决此问题的任何人,我将不胜感激。谢谢
好的,解决了这个问题。在没有 Starling 的情况下,常规 Flash 渲染器将正确调整 StageWebView 的大小 class,而使用 Starling,我们必须处理自己的调整大小事件。
因此,在我的 Sprite 派生容器 class 的 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 的基本大小,但你明白了。