Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3:调整StageWebView on Event.Resize(在使用Starling时调整大小)_Actionscript 3_Flash_Air_Starling Framework_Stagewebview - Fatal编程技术网

Actionscript 3 AS3:调整StageWebView on Event.Resize(在使用Starling时调整大小)

Actionscript 3 AS3:调整StageWebView on Event.Resize(在使用Starling时调整大小),actionscript-3,flash,air,starling-framework,stagewebview,Actionscript 3,Flash,Air,Starling Framework,Stagewebview,我正在构建一个混合交互AS3/AIR应用程序。我的一些场景使用常规的CPU渲染显示类(flash.display.Sprite、flash.display.MovieClip),另一种高密度图形模式使用Starling。我可以在两者之间切换并愉快地使用它们,并且我可以在720p的窗口模式和全屏模式之间切换 然而,我只是添加了一个StageWebView来轻松添加一些基于HTML的内容,我在调整大小方面遇到了麻烦。如果我不调用“new Starling()”,那么当我从窗口切换到全屏时,Stage

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

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

我是否需要event.RESIZE的事件处理程序来专门调整StageWebView对象的视口成员?如何从原始固定窗口大小获得正确的相对尺寸?(我试着看了看舞台的宽度/高度,发现数字大得出奇,因为AIR没有正确地构建一个新的矩形)


我将非常感谢为解决此问题的任何人提供的任何示例代码。谢谢。

好的,解决了这个问题。如果没有Starling,常规Flash渲染器将正确处理StageWebView类的大小调整,而使用Starling,我们必须处理自己的大小调整事件

因此,在我的Sprite派生容器类的OnAddedStatage方法(它本身是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,也不应该硬编码视口的基本大小,但是您知道了。

好的,修复了这个问题。如果没有Starling,常规Flash渲染器将正确处理StageWebView类的大小调整,而使用Starling,我们必须处理自己的大小调整事件

因此,在我的Sprite派生容器类的OnAddedStatage方法(它本身是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,也不应该硬编码视口的基本大小,但您知道了。

看起来我在需要stage.stageWidth(和height,分别)时,从stage.width计算宽度是错误的。是的,解决方法是手动调整大小,请参阅下面的答案。在你自己发布的问答中有很多错误的陈述。我的建议是删除整件事,因为它对任何人都没有帮助。当然,StageWebView不会像您所说的那样自动调整大小,Flash中甚至没有自动调整StageWebView大小的机制。只有编码人员可以通过将矩形对象传递到StageWebView视口来给出大小。更正后,我们现在只能得出结论,您的代码和您的代码造成了问题,您的答案只是对您自己的代码的修复。如果应用程序转换为全屏交互,则添加到没有Starling的项目中的StageWebView将调整其相对于阶段的大小。我的工作代码演示了这一点。再次出错,当全屏显示时,没有任何东西可以调整其大小。全屏模式是全屏视口定义的屏幕或部分屏幕的投影。在全屏显示之前和之后跟踪webview视口时,仍然会得到相同的值。好的,发布代码。我来运行它。但是我知道我的工作代码中有什么行为,这些注释不是合适的参数位置。当我需要stage.stageWidth(分别是高度和高度)时,我似乎没有正确地从stage.width计算宽度。是的,解决方法是手动调整大小,请参阅下面的答案。在你自己发布的问答中有很多错误的陈述。我的建议是删除整件事,因为它对任何人都没有帮助。当然,StageWebView不会像您所说的那样自动调整大小,Flash中甚至没有自动调整StageWebView大小的机制。只有编码人员可以通过将矩形对象传递到StageWebView视口来给出大小。更正后,我们现在只能得出结论,您的代码和您的代码造成了问题,您的答案只是对您自己的代码的修复。如果应用程序转换为全屏交互,则添加到没有Starling的项目中的StageWebView将调整其相对于阶段的大小。我的工作代码演示了这一点。再次出错,当全屏显示时,没有任何东西可以调整其大小。全屏模式是全屏视口定义的屏幕或部分屏幕的投影。在全屏显示之前和之后跟踪webview视口时,仍然会得到相同的值。好的,发布代码。我来运行它。但是我知道我的工作代码中有什么行为,并且这些注释不是进行争论的合适位置。