0

我制作了一个游戏,它在两个文件中运行,一个是预加载器,一个是 swf。当我将这两个文件一起使用时,它们可以正常工作,但是一些 Flash 门户只需要一个 SWF,所以我试图找到一种最短路径的方法来将其转换为只使用一个。

游戏 swf 使用包含包、类构造函数和大量函数的文档类,并且运行良好。我在我的代码中引用的舞台上有很多电影剪辑。代码是这样的(删节):

package  {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
...
    public class Game extends MovieClip {       
    var EnemyArray:Array;
    var HeroArray:Array;
...
public function Game() { // class constructor
        EnemyArray = new Array();
        addEventListener(Event.ENTER_FRAME,onEnterFrame);
                    mainRestartButton.addEventListener(MouseEvent.CLICK, RestartLevel);
...
}
public function KeyPressed(event:KeyboardEvent):void
    {
        if (event.keyCode == Keyboard.SPACE)
        {
        attack();
...
            }
} // End of class
} // End of package

我还有另一个 swf,我的预加载器,它在第 1 帧中有以下代码:

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

var myLoader:Loader = new Loader();
myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoading);
var myURL:URLRequest = new URLRequest("Game.swf");
myLoader.load(myURL);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

function onLoading(event:ProgressEvent):void {
    var loaded:Number = event.bytesLoaded / event.bytesTotal; 
    percent_txt.text = "Loading: " + (loaded*100).toFixed(0) + "%";

}

function onComplete(event:Event):void { 
    myLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onLoading);
    myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
    this.addChild(myLoader);
}

我已经在线浏览了各种各样的解决方案,但它们似乎都不适用于我的代码设置方式,例如:如何在 AS3 中创建预加载器

我尝试了他的选项 1,将我的文档类中的所有代码(包和构造函数除外)粘贴到第 2 帧中。但是它返回“错误 #1009:无法访问空对象引用的属性或方法”。对舞台上项目的任何引用,例如:

  mainRestartButton.addEventListener(MouseEvent.CLICK, RestartLevel);

正如他所提到的,“如果您以大多数资产(图像等)都在 Flash IDE 库中并且没有在第一帧加载(您可以在每个库项目的特性)。” 我的项目不是以这种方式组织的。

对我来说,重组我的 FLA/代码以便他们可以在单个 swf 中拥有预加载器的最简单方法是什么?

非常感谢您的时间和帮助!

4

1 回答 1

0

我使用 FlashDevelop(无 FLA),所以我不确定它是否适合您,但我使用此处描述的解决方案。

于 2012-08-15T23:49:01.573 回答