【问题标题】:How to make pre-loaded swf fill the browser?如何使预加载的 swf 填充浏览器?
【发布时间】:2012-08-11 06:55:09
【问题描述】:

让我稍微解释一下我的问题。

我正在创建一个 Flash 网站,我正在使用一个小的外部预加载器 swf 来加载主 swf。我已经能够让我的预加载器 swf 占据整个浏览器窗口,但是一旦它加载到主 swf 中,它只会以它内置的正常尺寸显示。

我在主 Flash 应用程序中有一个调整大小的监听器,一旦我改变浏览器的大小,主 swf 就会占据整个浏览器。但是我怎样才能让它以这种方式开始呢?

-我尝试使用 ENTER_FRAME 处理程序,但这破坏了我的一些动画。 - 我尝试在预加载器中设置加载器对象的宽度和高度,但这似乎也不起作用。 - 我也尝试向加载器添加一个 ADDED_TO_STAGE 侦听器,但这似乎并没有改变任何东西。 -我还尝试让预加载器在一个场景中,而主应用程序在另一个场景中,这样我只加载了一个 swf,但这似乎不起作用,我不喜欢这种预加载方法。

我无法在任何地方找到解决方案。有什么容易我想念的吗?让我知道你们的想法。预加载器代码如下:

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;

var request:URLRequest = new URLRequest("flashNew.swf");
var loader:Loader = new Loader();


loader.load(request);
this.addChild(loader);


function loadProgress(event:ProgressEvent):void
{
    var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
    var percentLoadedBar:Number = Math.round((event.bytesLoaded / event.bytesTotal) * 100);
    percentLoaded = Math.round(percentLoaded * 100);

    this.percentLoaded.text = String(uint(percentLoaded)) + "%";

    progressBar.width = percentLoadedBar * 3.36;
}

function loadComplete(event:Event):void
{
    //loader.content.height = stage.stageHeight;
    //loader.content.width = stage.stageWidth;
}

function setDimensions(event:Event):void
{
    loader.width = stage.stageWidth;
    loader.height = stage.stageHeight;
}

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
loader.contentLoaderInfo.addEventListener(Event.ADDED_TO_STAGE, setDimensions);

有没有办法可以通过 javascript 或其他方式进行更改?我在这里不知所措,我已经坚持了几个小时。任何帮助,将不胜感激。谢谢!

更新 这是我的调整大小功能的代码。

function resizeListener(e:Event):void
{
    background_mc.width = stage.stageWidth;
    background_mc.height = stage.stageHeight;
    //The rest of the function is omitted. It is if's and else-if's that just reposition various elements.
    //That's really all this function does is re-position elements with the exception of the above code which resizes the background.
}

这里是事件监听器调用。

stage.addEventListener(Event.RESIZE, resizeListener);

【问题讨论】:

  • 如果您更新了您的问题以在 html 页面中包含用于调整 swf 大小的代码,那就太好了。
  • 与您的问题无关,但一个好的做法是在您调用 loader.load() 之前添加您的 loader.contentLoaderInfo 事件侦听器

标签: html actionscript-3 flash preloader preload


【解决方案1】:

试试这个:

删除了这行代码:this.addChild(loader);

然后将您的 loadComplete 函数调整为:

function loadComplete(event:Event):void
{
    addChild(loader.content);
    loader.content.height = stage.stageHeight;
    loader.content.width = stage.stageWidth;
}

【讨论】:

  • 您的页面是否可以在某个地方访问以供我查看?
  • 是的。转到:istanek.com/SoundRehabStudios/index.html 正如您所看到的,当新的 swf 加载到其中时,它确实会填满浏览器(至少在 1920x1080 上不是我的),并且您可以看到我在舞台外隐藏的一些元素。我知道我可以用 alpha 或可见隐藏它们,但这暂时更容易。
  • 实际上它第一次对我来说很好用(我也运行 1920x1080),然后我调整了窗口大小并刷新了它,但它没有用。
  • 可能与您的子 swf 有关,如果它的尺寸在创建后发生变化。要对此进行测试,请尝试在 loadComplete 处理程序中延迟调用 setDimensions。例如:setTimeout(1500,setDimensions) ;
  • 嗯,很有趣。这些可能是罪魁祸首吗? stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT;我在主应用程序中有这些。他们在那里帮助确保元素在调整大小时正确重新定位,或者无论如何我都相信。将尝试您的其他建议。感谢您的所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多