【问题标题】:Retrieve original stage width and height after scale缩放后检索原始舞台宽度和高度
【发布时间】:2011-07-11 11:59:10
【问题描述】:

有谁知道我如何检索在 Air/Flash 应用程序编译期间设置的“原始”舞台高度和宽度

我已将应用程序设置为编译为 1920x1080;

我有 stage.scaleMode = StageScaleMode.SHOW_ALL;

和stage.nativeWindow.maximize();

但是当我跟踪 stage.stageWidth 时,我得到 1280,这是屏幕的分辨率。

我希望得到 1920。

我不能使用 stage.width 或 stage.getBounds(stage),因为这会返回 6000。由于项目被屏蔽在屏幕之外。

由于 stage.stageWidth 是屏幕分辨率,我希望我可以使用它并使用 stage.scaleX 在数学上计算出原始分辨率。但即使 SHOW_ALL 缩放整个应用程序,stage.scaleX 也会返回 1。

我很想将 1920x1080 硬编码到应用程序中,但此代码正用于各种尺寸的多个应用程序。现在我被难住了。

欢迎任何帮助。

编辑:我知道“全部显示”的作用,你不需要告诉我。

我也知道 stage.width 和 stage.stageWidth 的作用,但是 stage.stageWidth 正在返回我认为在此示例中不正确的内容,需要替代方法。

调整大小也无济于事,因为事后我需要它。

【问题讨论】:

    标签: actionscript-3 actionscript size stage


    【解决方案1】:

    设置时:

    stage.scaleMode = StageScaleMode.SHOW_ALL;
    

    Event.RESIZE 没有从 stage 发送,因为舞台没有调整大小。

    stage.width - 是一个参数,它为您提供放置在其上的所有显示对象的大小(将舞台上放置的所有东西想象成一个 MC)。

    stage.stageWidth - 这个参数只会返回默认宽度(因为没有 REIZE 发生,因为你有 scaleMode=SHOWALL,通常它会返回可见的 flash 舞台大小。

    如果你想获取屏幕的大小(设备分辨率):

    Capabilities.screenResolutionX
    

    SHOW_ALL 的 scaleMode 参数表示应用程序拉伸到 Flash 显示尺寸。

    如果你想为不同尺寸的屏幕/闪光灯展示舞台改变一些东西, 您需要使用NO_SCALE 属性。

    附言对于宽度参数,同样的规则适用。

    更新

    经过一些测试找到了解决方案:

    stage.scaleMode = StageScaleMode.NO_SCALE; // reseting the scale to get actual width
    ACTUAL_STAGE_WIDTH = stage.stageWidth; // this is where you getting the width you need
    stage.scaleMode = StageScaleMode.SHOW_ALL; // setting back the scale.
    

    【讨论】:

    • 你错了,stage.stageWidth 没有返回正确的结果。不,我不希望得到屏幕分辨率。也就是说,正如你所展示的,很容易掌握。不幸的是,我无法将您的答案降级为“投反对票”。我知道你展示的所有属性都做了什么,但我有点困惑为什么你选择在这里列出它们。
    • 请再读一遍。仅当您将使用 stage.scaleMode = StageScaleMode.NO_SCALE; 时,stage.stageWidth 才会返回正确的值
    • 因为这是获得所需参数的唯一方法。
    • 编辑了答案。已为您找到解决方案。
    • 问题是变化发生在同一帧,所以不会有舞台重绘(这是我的理论)。
    【解决方案2】:

    @Jevgenij Dmitrijev 的解决方案有点骇人听闻。 (无冒犯)

    获取已发布 SWF 大小的真正答案是使用

    this.loaderInfo.width;
    this.loaderInfo.height;
    

    在一个较旧的 actionscript 论坛上找到它,我自己忘记了。

    您可以在 ASdoc 上查找加载程序信息,他们会给您一个深入的解释。

    【讨论】:

    • 谢谢你。这个解决方案有一个小问题Error #2099: The loading object is not sufficiently loaded to provide this information.。现在,如果我放入一个计时器并执行此操作,它可以工作,但我不太喜欢使用黑客来让这个解决方案工作。我最后所做的只是使用一个带有静态变量的类来保存在构造时设置的高度和宽度。不完全是利刃,但有时愚蠢的方法似乎最自信。
    • 我只记得使用这种方法的另一种方法。 loaderInfo.addEventListener(Event.COMPLETE, _onComplete_info);private function _onComplete(__e:Event):void { trace(loaderInfo.width, loaderInfo.height); }
    • 您不能直接使用 loaderInfo 属性,您必须确保 SWF 已完成加载。你应该推迟初始化你的应用程序,直到它完成加载。所有内容都引用了应用程序的加载器信息,因此您可以在任何级别上使用它,除了 stage.loaderInfo 舞台的加载器信息永远不会加载。
    • .....是的..所以我发布了onComplete函数..我不明白你刚才发布的原因?
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2013-09-30
    相关资源
    最近更新 更多