【问题标题】:Loading Images with Real Screen Resolution (Flash AS3)加载具有真实屏幕分辨率的图像 (Flash AS3)
【发布时间】:2010-04-18 22:47:47
【问题描述】:

我正在使用 loadflash.display.Loader 将 JPEG 加载到 Flash 演示文稿中,效果很好。 JPEG 正在调整其原始分辨率(这是完美的)。但是,如果我最大化 Flash 演示文稿(在 Flash Player 中),JPG 不会利用更大的屏幕。

例如,演示文稿为 1024x768,图片为 1280x400。通常,图像会在 Flash 演示文稿中显示部分屏幕外。但是,如果我将 Flash 演示文稿扩展为 1680x1200,新加载的图像仍然会离开屏幕。 有没有办法加载 jpg(或 png,或其他)以利用 Flash 演示文稿的显示分辨率?

编辑:我意识到这个问题很难阅读,所以任何帮助将不胜感激。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    确保您的内容未缩放:

    stage.scaleMode = StageScaleMode.NO_SCALE;
    

    这将使 Flash 将其显示区域视为绝对大小,因此当您展开其容器时,它将有更多像素可供播放。了解 scalemodes here


    附录:根据您的 cmets,需要快速复习一下缩放。 (只有!)三件事会影响您的 Flash 内容的缩放方式:

    1. 容器大小(即,如果您使用浏览器,则为嵌入标签的大小,如果您在本地测试 SWF,则为 Flash Player 窗口的大小)
    2. 阶段大小(即发布时阶段的大小 - 当您没有选择任何内容时,您在创作工具的属性检查器中看到的大小)
    3. 缩放模式(正如您所注意到的,它是一个全局属性 - 只有一个阶段,每个影片剪辑只有一个对其的引用)

    发生的情况是这样的:如果缩放模式设置为“无缩放”,那么 Flash 会完全忽略舞台大小,并简单地显示未缩放的内容。如果您的缩放模式不是“无缩放”,那么 Flash 会缩放您的内容,以使舞台大小与容器大小相匹配。 (不同的缩放模式设置只是控制Flash是否改变纵横比,以及当舞台和容器具有不同纵横比时是否匹配内部或外部尺寸。)

    现在是棘手的部分。如果您希望您的内容在容器更改大小时表现不同(这就是您全屏时发生的情况),您需要使用“无缩放”。原因是,当 Flash 处理缩放时,您的内容总是“认为”容器大小等于舞台大小。也就是说,如果您的舞台尺寸为 800x600,并且您的容器尺寸放大到 1024x768,Flash 会告诉您的内容容器仍然是 800x600,并且无论您的内容显示什么,都会按比例放大。如果您使用“无缩放”,那么 Flash 会告诉您的内容真实的容器大小,并假设您将进行自己的缩放。

    这些是基础。现在继续解决您的问题,这就是您可能需要做的事情。

    1. 确保将缩放模式设置为无缩放。
    2. 当您加载内容时,自行将其缩放到您希望的大小。您可以查询stage.stageHeightstage.stageWidth 了解当前容器大小。
    3. 注册以在舞台大小发生变化时接收事件,并在发生这种情况时将图像重新缩放到您希望它们显示的大小。

    下面是第三点的示例代码:

    stage.addEventListener( Event.RESIZE, onStageResize );
    // ...
    function onStageResize( e:Event ) {
        myImg.width = stage.stageWidth;
        myImg.height = stage.stageHeight;
        // or whatever
    }
    

    希望有帮助!

    【讨论】:

    • @fenomas,谢谢。问题是我们需要扩展内容,而不是为了这一件事。也许我可以单独设置它的舞台,或者只是为了方便每个DisplayObject都有自己的舞台?
    • 回答我自己的问题,舞台是一体的,看来,比例模式是共享的。所以我需要使用StageScaleMode.EXACT_FIT 但是没有办法做我想做的事?
    • @fenomas,这就是重点,我没有调整图像的大小。只需将 contentLoader 作为子项添加到另一个 DisplayObject
    • 我可以看到舞台缩放的复习是有序的。 :D 请检查我相当扩展的答案。
    • 这个答案很好,我很感激你经历了所有这些事情。但是,如果他们给您的演示文稿非常依赖于对齐、放置和调整大小的真实像素值,您会怎么做?然后你要么“聪明地”重做所有事情(比如 Java 布局,比如说),而不是使用绝对像素大小?
    【解决方案2】:

    Feomas 的回答非常棒,并且真正涵盖了缩放方面的所有内容。然而,对我来说,答案是不考虑缩放(反正我别无选择,没有时间重做整个演示文稿以不面向像素):

    1. 请勿使用正确分辨率的图像。使用非常大的图片。
    2. 当您加载它们时,在 Event.COMPLETE 处理程序中,将它们缩放到您需要的大小(我只是考虑宽度,但您当然应该考虑一个边界框):

    所以代码看起来像这样:

    if (contentLoader.content.width > MAX_WIDTH) {
        var bitmap:Bitmap = Bitmap(contentLoader.content);
        bitmap.smoothing = true;  // the whole point of the exercise, really
        var oldW = bitmap.width;
        bitmap.width = MAX_WIDTH;
        bitmap.height = MAX_WIDTH / oldW * bitmap.height;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多