使用真实屏幕分辨率加载图像(Flash AS3)

时间:2010-04-18 22:47:48

标签: flash actionscript-3

我正在使用带有load的{​​{1}}将JPEG加载到Flash演示文稿中,并且效果很好。 JPEG正在调整其原始分辨率(这是完美的)。但是,如果我最大化Flash演示文稿(在Flash Player中),则JPG不会利用更大的屏幕。

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

编辑:我意识到这个问题很难阅读,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:4)

确保您的内容未缩放:

stage.scaleMode = StageScaleMode.NO_SCALE;

这会使Flash将其显示区域视为绝对大小,因此当您展开其容器时,它将有更多像素可供使用。阅读有关scalemodes here的信息。


附录:根据您的意见,快速了解缩放比例。 (仅有!)有三个因素会影响Flash内容的缩放:

  1. 容器大小(即,如果您使用的是浏览器,则为嵌入式代码的大小;如果您在本地测试SWF,则为Flash Player窗口的大小)
  2. 舞台大小(即发布时舞台的大小 - 当您没有选择任何内容时在制作工具的Property Inspector中看到的大小)
  3. 缩放模式(正如您所注意到的那样,是一个全局属性 - 只有一个舞台,每个影片剪辑都有一个对它的引用)
  4. 如果比例模式设置为“无比例”,则Flash会完全忽略舞台大小,只显示未缩放的内容。如果缩放模式不是“无缩放”,则Flash会缩放您的内容,以使舞台大小与容器大小相匹配。 (不同的比例模式设置仅控制Flash是否更改宽高比,以及当舞台和容器具有不同方面时它是否与内部或外部尺寸匹配。)

    现在这里是棘手的一点。如果您希望您的内容在容器更改大小时表现不同(这是您全屏时会发生的情况),则需要使用“无比例”。原因是,当Flash处理缩放时,您的内容始终“认为”Container大小等于舞台大小。也就是说,如果您的舞台大小为800x600,并且您的容器大小扩大到1024x768,则Flash会告诉您的内容容器仍然是800x600,并且可以扩展您的内容所显示的内容。如果您使用“无比例”,则Flash会告诉您的内容真正的容器大小,并假设您将进行自己的缩放。

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

    1. 确保将比例模式设置为无比例。
    2. 当您加载内容时,请自行扩展至您希望的大小。您可以查询stage.stageHeightstage.stageWidth以查找当前的容器大小。
    3. 注册以在舞台大小更改时接收活动,当发生这种情况时,请重新缩放图片,但您希望它们显示。
    4. 以下是让您开始第三点的示例代码:

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

      希望有所帮助!

答案 1 :(得分:0)

<\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ \ \ \ \ \ \ \ \ \ \然而,我的答案是单独留下缩放(无论如何我没有选择,没有时间重做整个演示文稿而不是像素导向):

  1. 请勿使用分辨率正确的图像。使用非常大的图像。
  2. 当你加载它们时,在Event.COMPLETE处理程序中,将它们缩放到你需要的大小(我只考虑宽度,但你应该考虑一个边界框):
  3. 所以代码看起来像这样:

    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;
    }