我正在构建一个混合交互AS3/AIR应用程序。我的一些场景使用常规的CPU渲染显示类(flash.display)。Sprite, flash.display.MovieClip)和另一种高密度图形模式使用Starling。我可以愉快地切换和使用这些,我可以在720p的窗口模式和全屏模式之间切换。
然而,我刚刚添加了一个StageWebView来轻松添加一些基于HTML的内容,我在调整大小方面遇到了麻烦。如果我不调用"new Starling()",那么当我从窗口切换到全屏时,StageWebView实例将正确调整大小以保持相同的相对屏幕尺寸。然而,只要我创建一个Starling实例,StageWebView将不会正确地调整全屏大小;它保留了最初指定的绝对维度。如果我没有实例化Starling, StageWebView会完美地调整大小。
我需要一个事件处理程序的事件。调整大小具体调整viewPort成员的StageWebView对象?如何从原始固定窗口大小获得正确的相对尺寸?(我试着看舞台的宽度/高度和数字是奇怪的大,与AIR未能正确建立一个新的矩形)。
我将感谢任何人谁已经解决了这个问题的任何示例代码。谢谢。
好的,修复了这个问题。在没有Starling的情况下,普通的Flash Renderer会正确地处理StageWebView类的大小调整,而使用Starling,我们必须处理我们自己的大小调整事件。
因此,在我的sprite派生的容器类的onAddedToStage方法(它本身是Event.ADDED_TO_STAGE的处理程序)中,我添加了以下内容:addEventListener(事件。调整,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的基本大小,但是您可以理解。