0

好样的!

我还有另一个关于在现有文件中加载 .swf 的问题。

在我的游戏中。我有一个介绍屏幕,我在其中加载了另一个 .swf(这是一部电影)。这一切正常,URLRequest 是这样的:

request = new URLRequest("Movie.swf");

正如我所说,这很好用。但是,当我将我的 game.swf 和 movie.swf 复制到 U 盘时。(我将它们放在同一目录中以防止其他问题)。好像没有找到movie.swf。

现在我知道它与 URLRequest 和/或发布设置中给出的路径有关。但我不知道如何做到这一点,以便它在与 game.swf 所在的目录相同的目录中搜索。

我希望你们对这个问题有一个答案。

提前致谢,

马蒂。

4

1 回答 1

1

Matti,我相信 Lukasz 的评论是正确的,因为它是一个安全错误。

您可以通过嵌入 Movie.swf 而不是使用加载程序来避免此安全错误。如果您这样做,那么在编译时,Movie.swf 需要位于 Game.as 文件旁边,它将包含在 Game.swf 中(无需同时提供这两个文件,只需 Game.swf)。

语法是:

package
{
  import flash.display.Sprite;

  public class Game extends Sprite
  {

    [Embed(source="MyMovie.swf")]
      private var myMovieClass:Class;

    private var myMovie:DisplayObject;

    public function Game():void
    {
      myMovie = new myMovieClass();

      // Technically myMovie is now a Loader, and once
      // it's loaded, it'll have .content that's a
      // MovieClipLoaderAsset, and .content.getChildAt(0)
      // will be your MyMovie.swf main timeline.
    }
  }
}

或者,如果您将其嵌入为 mimeType="application/octet-stream",您可以获取 SWF 的字节并在现有 Loader 的 .loadBytes() 方法中使用它:

package
{
  import flash.display.Sprite;
  import flash.utils.ByteArray;

  public class Game extends Sprite
  {

    [Embed(source="MyMovie.swf", mimeType="application/octet-stream")]
      private var movieBytes:Class;

    private var myMovie:DisplayObject;

    public function Game():void
    {
      // Treat this loader the same as your current loader,
      // but don't call .load(url), call loadbytes():
      var l:Loader = new Loader();
      l.loadBytes(new movieBytes() as ByteArray);
    }
  }
}
于 2012-11-16T15:32:00.130 回答